我认为这应该很简单,但过去几个小时我一直在与它斗争,这真的让人感到沮丧。
我正在使用jQuery调用Wikipedia API,如下所示:
var apiurl = 'https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles='+$(this).data('name');
$.ajax( {
url: apiurl,
jsonp: "callback",
dataType: 'jsonp',
data: '',
xhrFields: { withCredentials: true },
success: function(data) {
console.log(data);
}
});
$(this).data(' name')位是化学元素的名称,比如" Scandium"为了讨论。
现在,这个调用工作正常,我按预期从API中获取一个JSON对象。但是,我很难真正处理这些信息。下面是在我的javascript控制台中展开的对象的屏幕截图:
说我想打印出"提取物"这个对象的一部分,仅此一点,我该怎么做?
我通常只使用点符号并按照console.log(data.query.pages ......)的方式做一些事情,但后来我碰到了一堵砖墙,因为链条的下一部分是一个整数,不仅如此,而且它是一个我不会总是知道的整数,因为它会根据我呼叫的元素而有所不同。
非常感谢任何建议!
答案 0 :(得分:3)
作为点表示法的替代方法,您可以使用下标表示法:
console.log(data["query"]["pages"][27116]["extract"]);
如果您不知道整数将提前是什么,您可以循环遍历对象的属性,如下所示:
var pages = data["query"]["pages"];
for(var key in pages) {
if(pages.hasOwnProperty(key)) {
// Here, 'key' is bound to an attribute
// name so we can get the associated value like so:
var value = pages[key];
// In your example, value should look like
// {"extract": "Scandium is a chem...", "ns": 0, ... }
}
}
' hasOwnProperty'检查可以防止您的循环考虑“页面”和“页面”的属性。遗传。这样,循环将只处理从API调用返回的数据。