Используйте цикл for для получения данных из объекта JSON, который не является массивом

Я пытаюсь просмотреть результаты ответа JSON и получить заголовок каждой статьи, однако моя хостинговая компания упомянула, что возвращаемый объект не является массивом, поэтому я не могу просмотреть все статьи.

В настоящее время он дает мне неопределенное количество статей.

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

Я попробовал все ниже и, наконец, прочитал где-нибудь, где я мог бы использовать цикл for-in. Поэтому я проверял этот пример здесь: http://www.w3schools.com/js/tryit.asp?filename=tryjs_object_for_in

Однако я понятия не имею, как применить этот цикл к моим данным, чтобы получить только статьи, а затем просмотреть их и получить их свойства.

JSON RESPONSE

{
    "blog": {
        "id": "1464",
        "comments": true,
        "url": "blogs\/magazine",
        "rss": "blogs\/magazine.rss",
        "title": "Taj Magazine",
        "articles": {
            "3748": {
                "id": 3748,
                "image": 7442452,
                "url": "blogs\/magazine\/foodies-walhalla-2",
                "title": "Foodies Walhalla 2",
                "author": "",
                "author_url": false,
                "summary": "dit is de samenvatting tekst",
                "content": "dit is het hele artikel",
                "date": "2013-11-13 13:54:00",
                "comments": [],
                "comments_count": 0,
                "tags": {
                    "foodies-walhalla": {
                        "id": "9794",
                        "url": "blogs\/magazine\/tagged\/foodies-walhalla",
                        "title": "Foodies Walhalla",
                        "count": "2"
                    },
                    "magazine": {
                        "id": "9744",
                        "url": "blogs\/magazine\/tagged\/magazine",
                        "title": "magazine",
                        "count": "6"
                    }
                }
            },
            "3747": {
                "id": 3747,
                "image": 7442441,
                "url": "blogs\/magazine\/foodies-walhalla-1",
                "title": "Foodies Walhalla 1",
                "author": "",
                "author_url": false,
                "summary": "f df gdsfg",
                "content": "dsfgsdfgdf sdfg",
                "date": "2013-11-13 11:22:00",
                "comments": [],
                "comments_count": 0,
                "tags": {
                    "foodies-walhalla": {
                        "id": "9794",
                        "url": "blogs\/magazine\/tagged\/foodies-walhalla",
                        "title": "Foodies Walhalla",
                        "count": "2"
                    },
                    "magazine": {
                        "id": "9744",
                        "url": "blogs\/magazine\/tagged\/magazine",
                        "title": "magazine",
                        "count": "6"
                    }
                }
            },
            "3744": {
                "id": 3744,
                "image": 7442425,
                "url": "blogs\/magazine\/beauty-artikel-2",
                "title": "Beauty artikel 2",
                "author": "",
                "author_url": false,
                "summary": "beauty article 2",
                "content": "dfg sfg sdfg sdfgd gdsf df gsdf gdsf g",
                "date": "2013-11-13 11:21:00",
                "comments": [],
                "comments_count": 0,
                "tags": {
                    "beauty": {
                        "id": "9792",
                        "url": "blogs\/magazine\/tagged\/beauty",
                        "title": "beauty",
                        "count": "2"
                    },
                    "healthy": {
                        "id": "9745",
                        "url": "blogs\/magazine\/tagged\/healthy",
                        "title": "healthy",
                        "count": "2"
                    },
                    "magazine": {
                        "id": "9744",
                        "url": "blogs\/magazine\/tagged\/magazine",
                        "title": "magazine",
                        "count": "6"
                    }
                }
            },
            "3745": {
                "id": 3745,
                "image": 7442417,
                "url": "blogs\/magazine\/love-life-1",
                "title": "Love & Life 1",
                "author": "",
                "author_url": false,
                "summary": "dfgdsfgd",
                "content": "f gdf gdfgdfg dfgdsfgdsfgdsfg",
                "date": "2013-11-13 11:21:00",
                "comments": [],
                "comments_count": 0,
                "tags": {
                    "love-life": {
                        "id": "9793",
                        "url": "blogs\/magazine\/tagged\/love-life",
                        "title": "love & life",
                        "count": "2"
                    },
                    "magazine": {
                        "id": "9744",
                        "url": "blogs\/magazine\/tagged\/magazine",
                        "title": "magazine",
                        "count": "6"
                    }
                }
            },
            "3746": {
                "id": 3746,
                "image": 7442388,
                "url": "blogs\/magazine\/love-life-2",
                "title": "Love & Life 2",
                "author": "",
                "author_url": false,
                "summary": "dfkjghksdjfh gdskfjdj sdlkjfhdjfghdjklfsdfkjhg df gd ghdkjsfhgkjsd fg lkjdshklgdfh kjds glkjsdh kljdsfh",
                "content": "dfkjghksdjfh gdskfjdj sdlkjfhdjfghdjklfsdfkjhg df gd ghdkjsfhgkjsd fg lkjdshklgdfh kjds glkjsdh kljdsfh",
                "date": "2013-11-13 11:21:00",
                "comments": [],
                "comments_count": 0,
                "tags": {
                    "love-life": {
                        "id": "9793",
                        "url": "blogs\/magazine\/tagged\/love-life",
                        "title": "love & life",
                        "count": "2"
                    },
                    "magazine": {
                        "id": "9744",
                        "url": "blogs\/magazine\/tagged\/magazine",
                        "title": "magazine",
                        "count": "6"
                    }
                }
            }
        }
    },
    "request": {
        "url": "http:\/\/taj-ringen.webshopapp.com\/blogs\/magazine\/?format=json",
        "method": "get",
        "ssl": false,
        "get": {
            "format": "json"
        },
        "post": [],
        "device": {
            "platform": "windows",
            "type": "webkit",
            "mobile": false
        }
    },
    "template": "pages\/blog.rain",
    "renderer": "json"
}

JAVASCRIPT

<div id="loadstatus"></div>

<script type="text/javascript" language="javascript">
    var newresult = '';
    $.ajax({
        type: "GET",
        url: "http://taj-ringen.webshopapp.com/blogs/magazine/?format=json",
        data: "",
        dataType: "json",
        success: function (mydata) {
            console.log('load successful');
            console.log('mydata.blog.articles.length: ' + mydata.blog.articles.length);  //'undefined' error
            for (var i = 0; i < mydata.blog.articles.length; i++) {
                newresult += mydata.blog.articles[i].title;
            }
        }
    });

</script>

Я также посмотрел на этот пост: конвертировать объект в строку JSON

попробовал jQuery.parseJSON функция

        console.log(mydata);
        var tmp = jQuery.parseJSON(mydata);
        console.log(tmp);        
        console.log('tmp.blog.articles.length: ' + tmp.blog.articles.length);

Но там я получаю ошибку Uncaught SyntaxError: Unexpected token o на линии jquery-1.10.2.min.js:4

попробовал $.map функция

        var array = $.map(mydata, function (e) {
            return [$.map(e, function (v) {
                return v;
            })];
        });
        console.log(array);

        console.log('tmp.blog.articles.length: ' + array.blog.articles.length);

Здесь я получаю Uncaught TypeError: Cannot use 'in' operator to search for '14' in pages/blog.rain онлайн jquery-1.10.2.min.js:4

Я пытаюсь преобразовать объект, возвращаемый сайтом, и пройти через него.

1 ответ

Решение

Итерируйте по объекту article, вытягивая ключи, связанные с каждой статьей, используя метод, описанный в посте ниже:

Как вывести список свойств объекта JavaScript

Вы также можете использовать следующий цикл:

for(var article in blog.articles) {
    console.log(blog.articles[article].title);
}
Другие вопросы по тегам