Javascript 通过JSON格式使用Wiki API可以';我看不到内容
我使用以下代码从Wiki收集信息: 我可以得到这样的JSON字符串Javascript 通过JSON格式使用Wiki API可以';我看不到内容,javascript,json,api,mediawiki,Javascript,Json,Api,Mediawiki,我使用以下代码从Wiki收集信息: 我可以得到这样的JSON字符串 { "query": { "normalized": [{ "from": "apple", "to": "Apple" }], "pages": { "18978754": { "pageid": 18978754, "ns": 0,
{
"query": {
"normalized": [{
"from": "apple",
"to": "Apple"
}],
"pages": {
"18978754": {
"pageid": 18978754,
"ns": 0,
"title": "Apple",
"revisions": [{
"*": "Something....."
}]
}
}
}
}
我可以将其评估为JSON,但问题是,我可以进入query>pages,之后我无法深入,这是因为Wiki API以字符串18978754的形式返回我,但它无法通过以下方式获取值:
jsonObject.query.pages.18978754
我需要澄清一些假设,我不知道号码18978754。我是否需要先获取数字,或者我仍然可以在知道数字的情况下获取“某物…”。使用数组语法如何:
jsonObject.query.pages[18978754]
似乎正在使用firebug工作:
>>> data.query.pages[18978754]
Object pageid=18978754 ns=0 title=Apple revisions=[1]
以及:
注意:对于其他属性,也可以使用数组语法访问数据对象;例如:
>>> 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);
}
}
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]);
}
请注意,我使用它来确保我所在的对象具有属性,并且它不是来自任何类型的继承或类似的东西:
每个物体都是物体的后代
继承hasOwnProperty方法。
此方法可用于确定
对象是否具有指定的
财产作为其直接财产
对象与in运算符不同,此
方法不检查
对象的原型链
根据“修订版”
”中的内容,您可能也必须对该版本执行相同的操作,顺便说一句
希望这有助于更好地:-)
第二次编辑,在第二组注释之后: 嗯,再往前走一点(我不认为你是认真的): 是一个数组(请注意
[]
符号),似乎可以包含多个对象。
因此,您可以通过这种方式获得其中的第一个:
data.query.pages[pageId].revisions[0]
data.query.pages[pageId].revisions[1]
第二个是这样的:
data.query.pages[pageId].revisions[0]
data.query.pages[pageId].revisions[1]
(您提供的示例中没有第二个示例,顺便说一句——因此这是理论上的^^)
等等
要获取所有这些对象,您必须执行某种循环,如下所示:
for (var pageId in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageId)) {
console.log(data.query.pages[pageId].title);
}
}
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]);
}
因此,最终代码变成:
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]['*']);
}
}
}
当然,您可能只需要使用:
for (var pageId in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageId)) {
console.log(data.query.pages[pageId].revisions[0]['*']);
}
}
如果您总是希望只处理revisions
数组的第一个元素,那么这将很好地工作
注意:在你的例子中,只有一个修订;我提供的代码应该能够处理许多问题;由您决定如何处理这些;-) 我在为Wiki API创建基于php的解析器时也遇到了同样的问题——下面是我解决这个问题的方法
$new_result = array_pop($result["query"]["pages"]);
$final_result = $new_result["pageid"];
注意:我知道这是一个JS问题中的PHP代码,但在该论坛中找不到完全相同的问题/问题-我相信这对某些人会有用 晚了,但可能对其他人有帮助
将
&indexpageids
添加到请求时,您将获得页面ID
。更多信息。我可以直接获得“某物…”吗?还有一件事,假设我不知道“18978754”。。。。因为这个数字取决于wikiHi的不同主题,所以我编辑了我的答案,以展示一个在你不知道页面ID的情况下迭代页面的示例;希望这有帮助:-)我能回答这个问题吗?如何获得“某物…”值?(假设我不知道“某物…”data.query.pages[pageId].revisions.*和data.query.pages[pageId].revisions[*]都不起作用我已经第二次编辑了我的答案,以提供一个完整的示例(我想你会自己找到答案,这就是为什么我第一次没有进一步讨论的原因);希望这有帮助:-)请不要使用通用术语Wiki
来专门指代Wikipedia或它使用的MediaWiki软件。刚刚发现这一点,它是实验性的,但它重新排列了json,因此它不会以数字开头---&formatversion=2
这确实简化了问题!它使浏览JSON对象变得更加容易。