2017-08-17 55 views
0

我正忙着使用wiki API并试图从给定文章返回链接数组。这是我对工作的那种JSON的:从特定wiki文章中获取链接数组

{ 
    "continue": { 
    "plcontinue": "22989|0|2007_Rugby_World_Cup", 
    "continue": "||" 
    }, 
    "query": { 
    "normalized": [ 
     { 
     "from": "paris", 
     "to": "Paris" 
     } 
    ], 
    "pages": { 
     "22989": { 
     "pageid": 22989, 
     "ns": 0, 
     "title": "Paris", 
     "links": [ 
      { 
      "ns": 0, 
      "title": ", Île-de-France, Seine, Kingdom of France" 
      }, 

正如你可以看到我需要知道PAGEID我访问链接数组,我需要的。我尝试从plcontinue值中提取它,然后在代码中稍后插入它,但它返回一个未定义的值。

这是我的API请求:

$.ajax({ 
     url: "https://en.wikipedia.org/w/api.php?action=query&titles=" + searchTerm + "&pllimit=50&prop=links&format=json", 
     method: "GET", 
     dataType: "jsonp" //allow CORS 
    }).then(function (data) { 
     var plcontinueArray = data.continue.plcontinue.split("|") 
     var pageId = plcontinueArray[0]; 
     var links = data.query.pages.pageId.links; 

如何访问时,我不知道发出请求之前PAGEID链接的阵列?

+0

遍历'data.pages'数组中的对象? –

+0

只需遍历页面并获取它们中的每一个。 'for(pageid in data.query.pages)...'然后获取'data.query.pages [pageid] .links'。 – GolezTrol

+0

我建议通过'data.query.pages [pageId] .links'访问它。 – gus27

回答

2

以与使用点符号访问对象中的数据相同的方式,还可以使用类似索引的方法来访问对象的键。

例如:

var obj = { foo: "bar", spam: "eggs" }; 
var value1 = obj.foo; // value1 = "bar" 
var keyName = "spam"; 
var value2 = obj[keyName]; // value12 = "eggs" 

因此,对于你的榜样,你会做这样的事情 -

... 
var pageId = plcontinueArray[0]; 
var links = data.query.pages[pageId].links; 
0

您不正确访问PAGEID -

改变这一行 - var links = data.query.pages.pageId.links;var links = data.query.pages[pageId].links;

0

您可以仅使用for ... in循环遍历pages对象循环。 类似这样的:

... 

then(function (data) { 
    for(var pageId in data.query.pages) { 
     if (data.query.pages.hasOwnProperty(pageId)) { 
      console.log(data.query.pages[pageId].links); 
     } 
    } 
}); 

希望它有帮助。

相关问题