从特定的Wiki文章中获取一系列链接

时间:2017-08-17 08:48:04

标签: javascript arrays json web wikipedia

我正在使用wiki API,试图从返回的给定文章中获取一系列链接。这是我正在使用的那种JSON:

{
  "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,我如何访问链接数组?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您正在错误地访问pageId -

更改此行 - var links = data.query.pages.pageId.links;var links = data.query.pages[pageId].links;

答案 2 :(得分:0)

您可以使用pages循环遍历for ... in对象。 像这样:

...

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

希望它有所帮助。

相关问题