Задать вопрос
Cheizer
@Cheizer

Как из JSON массива получить строку из вложенного массива?

Подскажите пожалуйста, как из JSON массива второго уровня, получить строку?

Есть JSON массив, это из инстаграм ответ для вывода ленты на сайте.

{
            "node": {
                "__typename": "GraphSidecar",
                "id": "",
                "shortcode": "",
                "dimensions": {
                    "height": 1080,
                    "width": 1080
                },
                "display_url": "https://scontent-arn2-1.cdninstagram.com/v/......",
                "edge_media_to_tagged_user": {
                    "edges": []
                },
                "fact_check_overall_rating": null,
                "fact_check_information": null,
                "gating_info": null,
                "media_overlay_info": null,
                "media_preview": null,
                "owner": {
                    "id": "",
                    "username": ""
                },
                "is_video": false,
                "accessibility_caption": "",
                "edge_media_to_caption": {
                    "edges": [{
                        "node": {
                            "text": ""
                        }
                    }]
                },
                "edge_media_to_comment": {
                    "count": 7
                },
                "comments_disabled": false,
                "taken_at_timestamp": 1593419574,
                "edge_liked_by": {
                    "count": 72
                },
                "edge_media_preview_like": {
                    "count": 72
                },
                "location": null,
                "thumbnail_src": "https://scontent-arn2-1.cdninstagram.com/v/........",
                "thumbnail_resources": [
                    {
                    "src": "https://scontent-arn2-1.cdninstagram.com/v/........",
                    "config_width": 150,
                    "config_height": 150
                }, {
                    "src": "https://scontent-arn2-1.cdninstagram.com/v/.......",
                    "config_width": 240,
                    "config_height": 240
                }, {
                    "src": "https://scontent-arn2-1.cdninstagram.com/v/.......",
                    "config_width": 320,
                    "config_height": 320
                }, {
                    "src": "https://scontent-arn2-1.cdninstagram.com/v/.......",
                    "config_width": 480,
                    "config_height": 480
                }, {
                    "src": "https://scontent-arn2-1.cdninstagram.com/v/........",
                    "config_width": 640,
                    "config_height": 640
                }],
				
				
				
                "edge_sidecar_to_children": {
                    "edges": [
                        {
                        "node": {
                            "__typename": "GraphImage",
                            "id": "",
                            "shortcode": "",
                            "dimensions": {
                                "height": 1080,
                                "width": 1080
                            },
                            "display_url": "https://scontent-arn2-1.cdninstagram.com/v/........",
                            "edge_media_to_tagged_user": {
                                "edges": []
                            },
                            "fact_check_overall_rating": null,
                            "fact_check_information": null,
                            "gating_info": null,
                            "media_overlay_info": null,
                            "media_preview": "",
                            "owner": {
                                "id": "",
                                "username": ""
                            },
                            "is_video": false,
                            "accessibility_caption": ""
                        }
                    },
                     {
                        "node": {
                            "__typename": "GraphImage",
                            "id": "",
                            "shortcode": "",
                            "dimensions": {
                                "height": 1080,
                                "width": 1080
                            },
                            "display_url": "https://scontent-arn2-1.cdninstagram.com/v/........",
                            "edge_media_to_tagged_user": {
                                "edges": []
                            },
                            "fact_check_overall_rating": null,
                            "fact_check_information": null,
                            "gating_info": null,
                            "media_overlay_info": null,
                            "media_preview": "",
                            "owner": {
                                "id": "",
                                "username": ""
                            },
                            "is_video": false,
                            "accessibility_caption": ""
                        }
                    }]
                }
				
				
				
            }
        },


Вывожу на сайте так

function getInstagramFeed(username, container, items) {
	if(!$(container).length)
		return false;
	items = items || 32;
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.onreadystatechange = function() {
		if(xmlhttp.readyState==4 && xmlhttp.status==200) {
			data = xmlhttp.responseText;
			data = data.split("window._sharedData = ");
			data = data[1].split("<\/script>");
			data = data[0];
			data = data.substr(0, data.length-1);
			data = JSON.parse(data);
			data = data.entry_data.ProfilePage[0].graphql.user;
			if(data.is_private) {
				console.log('This account is private');
				return false;
			}
			else {
				var imgs = data.edge_owner_to_timeline_media.edges;
				max = (imgs.length>items) ? items : imgs.length;
				if(!max)
					return false;
				var html = "<div class='ig-wrapper'><div class='ig-container'>";
				

				for(var i=0; i<max; i++) {
					var url = "https://www.instagram.com/p/"+ imgs[i].node.shortcode +"/";
					var type = "";
					if(imgs[i].node.__typename=="GraphVideo")
						type = " class='video'";
					else if(imgs[i].node.__typename=="GraphSidecar")
						type = " class='series'";
					
					var caption = imgs[i].node.edge_media_to_caption.edges[0].node.text;
					caption = caption.replace(/#/g," #");
					caption = caption.replace(/(•\n)|#(.+?)(?=[\s.,:,]|$)/g, "");
					caption = caption.replace(/\n/g,"<br/>");
					caption = caption.replace(/[\s]{2,}/g," ");
					caption = caption.trim();
					if(caption)
					caption = "<span>"+ caption +"</span>\n";
					var like = imgs[i].node.edge_media_preview_like.count; 
					if(like)
					like = "<div>Лайков: "+ like +"</div>\n";
					var comments = imgs[i].node.edge_media_to_comment.count; 
					if(comments)
					comments = "<div>Комментариев: "+ comments +"</div>\n";
					
					var big = imgs[i].node.edge_sidecar_to_children.edges[0].display_url; 
					if(big)
					big = "<div>"+ big +"</div>\n";
					
					html += "<div class='single_item'>";
					html += "<a style='background-image:url("+ imgs[i].node.thumbnail_resources[4].src +");' href='"+ url +"' target='_blank'"+ type +">";
					html += caption;
					html += "</a>";
					html += like;
					html += comments;
					html += big;
					html += "</div>";
				}

				html += "</div></div>";
			}
			$(container).html(html);
		}
	}
	xmlhttp.open("GET", "https://www.instagram.com/"+ username +"/", true);
	xmlhttp.send();
}

getInstagramFeed("moya_planeta", "#instagramfeed", 32);


НО не могу получить параметр из массива edge_sidecar_to_children параметр display_url и записать в VAR big
но стразу выдает ошибку :(
Uncaught TypeError: Cannot read property 'edges' of undefined

Что не так? Подскажите пожалуйста!!!!

Вот закомментил big и все работает
  • Вопрос задан
  • 142 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Академия Eduson
    Fullstack-разработчик на JavaScript
    11 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
alekseyHunter
@alekseyHunter
Android developer
Сколько лишнего кода...
Выведи на экран, что тебе JSON.parse(data) возвращает.
Может ошибка вложенности.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы