0

我正在做一个 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": {...}

完整的对象响应在我的控制台中正确返回,但我想检索缩略图 url 并将其显示为 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,那就太好了:))

4

3 回答 3

1

你应该循环过去items

$.each(obj.items, function() {
    output += this.snippet ...
});
于 2013-02-07T14:35:51.057 回答
1

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

删除此行

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

并且简单地做

var obj = $.parseJSON(response);
于 2013-02-07T14:36:49.747 回答
1
  1. 你想迭代items
  2. snippet是一个对象字面量,
  3. + +不是有效的 JavaScript。
于 2013-02-07T14:36:53.367 回答