如何访问维基百科 API 返回的 JSON 中的嵌套对象

How to access nested object in JSON returned by Wikipedia API

本文关键字:API JSON 返回 对象 嵌套 百科 何访问 访问      更新时间:2023-09-26

从这个查询到维基百科API:

http://en.wikipedia.org/w/api.php?action=query&prop=links&format=json&plnamespace=0& pllimit=10&titles=List%20of%20television%20programs%20by%20name

我得到一个 JSON 结构,例如:

var data = {
  "query": {
    "pages": {
      "1536715": {
        "pageid": 1536715,
        "ns": 0,
        "title": "List of television programs by name",
        "links": [
          {
            "ns": 0,
            "title": "$1.98 Beauty Show"
          },
          {
            "ns": 0,
            "title": "''Dance Academy''"
          }
        ]
      }
    }
  },
  "query-continue": {
    "links": {
      "plcontinue": "1536715|0|15'/Love"
    }
  }
}

我想使用 "links" 数组的元素。但是,基于元素"pageid": 1536715的存在,我怀疑嵌套对象"1536715"的名称是一个可能会更改的动态值。我不愿意使用此名称来访问"links"数组,例如 query.pages.1536715.links .

有没有办法"跨过"这个对象,即使用通配符query.pages.*.links?如果做不到这一点,我可以迭代pages的子项来获取这个对象吗?我正在为这个项目使用 jQuery 1.7.2,以防您可以从那里建议任何有用的方法。

是的,您需要循环它。另请参阅使用jquery从维基媒体解析json字符串的非常相似的问题。您还可以使用 indexpageids 参数接收结果页面 ID 列表。

if (data && data.query && data.query.pages)
    var pages = data.query.pages;
else
    // error: No pages returned / other problems!
for (var id in pages) { // in your case a loop over one property
    var links = pages[id].links
    if (links)
        for (i=0; i<links.length; i++) {
            // do what you want with links[i]
        }
    else
        // error: No links array returned for whatever reasons!
}

这应该能让你到达那里...

var links, i, pageID;
for (pageID in query.pages) {
    links = query.pages[pageID].links;
    for (i=0; i<links.length; i++) {
        link = links[i];
        link.ns; link.title // handle link obj here.
    }
}