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 и все работает
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 1
alekseyHunter
@alekseyHunter
Android developer
Сколько лишнего кода...
Выведи на экран, что тебе JSON.parse(data) возвращает.
Может ошибка вложенности.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
30 нояб. 2024, в 20:49
2000 руб./за проект
30 нояб. 2024, в 20:18
5000 руб./за проект