使用for-in循环从不是数组的JSON对象获取数据

时间:2013-12-12 08:21:47

标签: arrays json undefined for-in-loop

我正在尝试遍历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行收到错误Uncaught SyntaxError: Unexpected token o: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 个答案:

答案 0 :(得分:1)

遍历文章对象,使用下面文章中描述的方法拉出与每篇文章相关的键:

How to list the properties of a JavaScript object

您还可以使用以下循环:

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