【问题标题】:Use a for-in loop to get data from a JSON object which is not an array使用 for-in 循环从不是数组的 JSON 对象中获取数据
【发布时间】:2013-12-12 08:21:47
【问题描述】:

我正在尝试遍历 JSON 响应的结果并获取每篇文章的标题,但是我的托管公司提到返回的对象不是数组,因此我无法遍历文章。

目前它给了我一个不确定的文章数量的长度。

如何循环浏览文章并获取它们的标题?

我尝试了以下所有内容,最后在可以使用 for-in 循环的地方阅读。 所以我在这里查看了这个例子:http://www.w3schools.com/js/tryit.asp?filename=tryjs_object_for_in

但是,我不知道如何在我的数据上应用此循环以仅获取文章,然后遍历这些文章并获取它们的属性。

JSON 响应

{
    "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>

我也看过这个帖子:Convert Object to JSON string

试过jQuery.parseJSON函数

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

但是我在 jquery-1.10.2.min.js:4 上收到错误 Uncaught SyntaxError: Unexpected token o

试过$.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

我想要做的是转换网站返回的对象并能够循环访问它。

【问题讨论】:

    标签: arrays json undefined for-in-loop


    【解决方案1】:

    遍历文章对象,使用下面帖子中描述的方法提取与每篇文章关联的键:

    How to list the properties of a JavaScript object

    您还可以使用以下循环:

    for(var article in blog.articles) {
        console.log(blog.articles[article].title);
    }
    

    【讨论】:

    • 谢谢。但是使用您的方法我得到:Uncaught TypeError: Cannot read property 'title' of undefined,可能是因为文章的 id 实际上包含属性标题等。如何更改您的语句以访问所有文章的标题属性?
    • 抱歉,我忘记将每篇文章从包含它们的数组中提取出来。更新了上面的代码,希望可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2019-10-31
    相关资源
    最近更新 更多