gpt4 book ai didi

javascript - 通过格式 JSON 使用 Wiki API 无法获取内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:20:08 26 4
gpt4 key购买 nike

我使用此代码从 Wiki 收集信息:

http://en.wikipedia.org/w/api.php?action=query&rvprop=content&prop=revisions&format=json&titles=apple

我可以得到这样的 JSON 字符串

{
"query": {
"normalized": [{
"from": "apple",
"to": "Apple"
}],
"pages": {
"18978754": {
"pageid": 18978754,
"ns": 0,
"title": "Apple",
"revisions": [{
"*": "Something....."
}]
}
}
}
}

我可以将它评估为 JSON,但问题是,我可以进入查询>页面,之后我无法更深入,因为 Wiki API 将我作为字符串 18978754 返回,但它不能'通过这个获得值(value):

jsonObject.query.pages.18978754

我需要澄清一些假设,我不知道数字 18978754。我是否需要先得到这个数字,或者我仍然可以在知道这个数字的情况下得到“Something...”。

最佳答案

如何使用数组语法:

jsonObject.query.pages[18978754]

似乎工作正常,使用 Firebug :

>>> data.query.pages[18978754]
Object pageid=18978754 ns=0 title=Apple revisions=[1]

和:

>>> data.query.pages[18978754].title
"Apple"

请注意,其他属性也可以使用数组语法访问数据对象;例如:

>>> data['query'].pages[18978754].title
"Apple"

这是完全有效的 JS 语法:-)


看到评论/编辑后添加

如果你不知道页面的 id,你可以遍历页面,像这样:

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

请注意,我使用的是 hasOwnProperty确保我所在的对象具有属性,并且它不是来自任何类型的继承或类似的东西:

Every object descended from Object inherits the hasOwnProperty method. This method can be used to determine whether an object has the specified property as a direct property of that object; unlike the in operator, this method does not check down the object's prototype chain.

根据“revision”中的内容,您可能也必须对那个版本执行相同的操作,顺便说一句...


希望这有助于更好地:-)



第二次编辑,在第二组评论之后:

好吧,走得更远(没想到你是字面上的意思):

data.query.pages[pageId].revisions

是一个数组(注意 [] 符号)似乎能够包含多个对象。
所以,你可以通过这种方式获得第一个:

data.query.pages[pageId].revisions[0]

第二个这样:

data.query.pages[pageId].revisions[1]

(在您提供的示例中没有第二个,顺便说一句——所以这是理论上的 ^^ )

等等。


要获得所有这些对象,您必须执行某种循环,如下所示:

var num_revisions = data.query.pages[pageId].revisions.length;
var i;
for (i=0 ; i<num_revisions ; i++) {
console.log(data.query.pages[pageId].revisions[i]);
}

现在,在该循环内,您应该能够获取给定对象的“*”属性:

data.query.pages[pageId].revisions[i]['*']


所以,最终的代码变成了:

for (var pageId in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageId)) {
var num_revisions = data.query.pages[pageId].revisions.length;
var i;
for (i=0 ; i<num_revisions ; i++) {
console.log(data.query.pages[pageId].revisions[i]['*']);
}
}
}

在 Firebug 中使用这段代码,我现在得到了你正在寻找的字面意思:

Something.....


当然,你可能只使用:

for (var pageId in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageId)) {
console.log(data.query.pages[pageId].revisions[0]['*']);
}
}

如果您总是只想处理 revisions 数组的第一个元素,这会很好地工作。


请注意:在您的示例中,只有一次修订;我提供的代码应该能够处理很多;由你来决定你想用那些做什么;-)

关于javascript - 通过格式 JSON 使用 Wiki API 无法获取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1216712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com