2012-05-21 58 views
0

返回该查询维基百科API JSON:如何访问嵌套对象在维基百科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"的名称是一个可能会更改的动态值。我不愿意使用这个名字来访问“链接”数组,例如query.pages.1536715.links

有没有什么办法可以“超越”这个对象,即使用通配符query.pages.*.links?否则,我可以迭代pages的子项来获取此对象吗?我为这个项目使用了jQuery 1.7.2,以防你可以从那里推荐任何有用的方法。

+0

可能重复(http://stackoverflow.com/questions/10196222/parse-json-string-from-wikimedia-using-jquery) – Bergi

回答

1

是的,你需要遍历它。另见非常类似的问题parse json string from wikimedia using jquery。您也可以使用indexpageids parameter接收结果页面的列表。的

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! 
} 
+0

好东西[使用jquery来自维基解析JSON字符串] @Bergi ,工作,谢谢! – psteiner

1

这应该让你有...

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. 
    } 
}