混合数组与json - 解析问题

时间:2013-02-07 14:33:32

标签: javascript jquery arrays json

我正在进行youtube api通话,我回来了一个var result = JSON.stringify(response, '', 2);看起来像:

{
    "kind": "youtube#searchListResponse",
    "pageInfo": {
            "totalResults": 1000000,
            "resultsPerPage": 5
        },
    "items": [
        {
            "id": {
                "kind": "youtube#video",
                "videoId": "DEne4AoX_RU"
            },
            "kind": "youtube#searchResult",
            "snippet": {
                "publishedAt": "2012-11-22T22:36:15.000Z",
                "thumbnails": {
                    "default": {
                        "url": "https://i.ytimg.com/vi/DEne4AoX_RU/default.jpg"
                    },
                    "medium": {
                        "url": "https://i.ytimg.com/vi/DEne4AoX_RU/mqdefault.jpg"
                    },
                    "high": {
                        "url": "https://i.ytimg.com/vi/DEne4AoX_RU/hqdefault.jpg"
                    }
                }
            }
        },
        {
            "id": {...}

完整对象响应在我的控制台中正确返回,但我想检索缩略图网址并将其显示为带有li标签的html列表 所以我首先尝试在列表中获取所有片段:

var obj = $.parseJSON(result);
$.each(obj, function() {
    output += this.snippet + + "<br/>";
});
console.log(output);

但我的控制台中有一条消息:Uncaught TypeError: Cannot read property 'length' of undefined。我错过了什么?顺便说一句,我不明白为什么json字符串result中仍然有括号(如果有人可以建议一些好的文档来理解如何解析JSON,那就太棒了:))

3 个答案:

答案 0 :(得分:1)

你应该循环items

$.each(obj.items, function() {
    output += this.snippet ...
});

答案 1 :(得分:1)

您收到的是JSON,您不应该将其字符串化。

删除此行

var result = JSON.stringify(response, '', 2);

然后简单地做

var obj = $.parseJSON(response);

答案 2 :(得分:1)

  1. 您希望迭代items
  2. snippet是一个对象文字,
  3. + +无效javascript。