2017-08-06 39 views
0

如果我运行此:我将如何获得嵌套数组中特定对象的列表?

var url="https://en.wikipedia.org/w/api.php?format=json&action=query&prop=categories&titles=Victory_Tests&callback=?"; 
$.getJSON(url,function(data){ 
    $.each(data, function(i, item) { 
     console.log(item); 
    }); 
}); 

控制台给我:

{pages: {…}} 
    pages: 2347232: 
    categories: Array(8)0: 
     {ns: 14, title: "Category:Aftermath of World War II in the United Kingdom"} 
     1: {ns: 14, title: "Category:All articles with unsourced statements"} 
     2: {ns: 14, title: "Category:Articles with unsourced statements from August 2015"} 
     3: {ns: 14, title: "Category:Articles with unsourced statements from March 2009"} 
     4: {ns: 14, title: "Category:English cricket seasons from 1919 to 1945"} 
     5: {ns: 14, title: "Category:History of Test cricket"} 
     6: {ns: 14, title: "Category:Use British English from September 2011"} 
     7: {ns: 14, title: "Category:Use dmy dates from September 2011"} 
     length: 8 
     __proto__: Array(0) 
     ns: 0 
     pageid: 2347232 
     title: "Victory Tests" 
    __proto__: 
    Object__proto__: 
Object__proto__: Object 

我需要得到所有categories

我试图item.categories

data.parse.pages.map(function(val){ 
    return val.categories[0]; 
})); 

但它不是右边

回答

1

假设一个页面已返回类似

Object.values(data.query.pages)[0].categories.map(cat=>cat.title.substr(9)) 

应该做的工作:

var url="https://en.wikipedia.org/w/api.php?format=json&action=query&prop=categories&titles=Victory_Tests&origin=*"; 
 
$.getJSON(url,function(data){ 
 
    var pages = Object.values(data.query.pages); 
 
    if(pages.length === 1) 
 
     console.log(pages[0].categories.map(cat => cat.title.substr(9))); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

根据您的需要浏览器的支持,你可能需要填充工具为Object.values ,如https://github.com/tc39/proposal-object-values-entries/blob/master/polyfill.js

(注意改变URL,在使用&origin=*代替&callback=?是更好的办法,因为它那么不返回JSONP但有效的JSON,这也可以通过XMLHttpRequest/fetchJSON.parse消耗我的意见。)

+0

所以'的console.log(Object.values(data.query.pages)[0] .categories.map( cat => cat.title.substr(9)));'会给我每一个? –

+0

也json返回罚款,没有错误 –

+0

返回第一页的类别标题数组。我将删除回调参数,否则返回一个不必要的'/ ** /(...)',严格来说,它不再是JSON,尽管'getJSON'仍然解析它。 – Stephan

2

你也许应该得到一个以上的页面,如果你想要聚合的一切,做到这一点:

var url="https://en.wikipedia.org/w/api.php?format=json&action=query&prop=categories&titles=Victory_Tests&callback=?"; 
$.getJSON(url,function(data){ 
    var categories = Object.values(data.query.pages).map((i) => i.categories.map((c) => c.title)); 
    console.log(categories); 
}); 
+0

不是页面每个循环都只有一个,所以我只需要那个页面的类别,并且抓取他们为每一个新的页面 –

+0

https://jsfiddle.net/jikupin/pz3ce0o6/1383/ –

+0

改变,再试一次 –

1

使用API​​参数formatversion=2

var url="https://en.wikipedia.org/w/api.php?format=json&formatversion=2&action=query&prop=categories&titles=Victory_Tests&callback=?"; 
 
$.getJSON(url,function(data){ 
 
    console.log($.map(data.query.pages, function(val){ 
 
     return val.categories; 
 
    })); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

(也利用了的jQuery.map变平阵列的能力。)

+0

虽然代码片段会事实上,''formatversion = 2'也可以工作,因为'jQuery.map'可以像数组一样处理对象。 – Tgr

+0

非常感谢,我在聊天中给你打电话,你能给我一点时间吗?堆积如山,疯狂地一点点 –

相关问题