使用数组语法怎么样:
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
用来确保我所在的对象具有该属性,并且它不是来自任何类型的继承或类似的东西:
从 Object 继承的每个对象都继承了 hasOwnProperty 方法。该方法可用于判断一个对象是否具有指定属性作为该对象的直接属性;与 in 运算符不同,此方法不检查对象的原型链。
根据“ 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]['*']);
}
}
}
在萤火虫中使用这段代码,我现在得到了你正在寻找的文字刺痛:
Something.....
当然,您可能只使用:
for (var pageId in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageId)) {
console.log(data.query.pages[pageId].revisions[0]['*']);
}
}
如果您总是只想处理revisions
数组的第一个元素,这会很好。
请注意:在您的示例中,只有一个修订版;我提供的代码应该可以处理很多;由你决定你想用这些做什么;-)