我使用此代码从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返回,但它无法获得价值由此:
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
以确保我所在的对象具有该属性,并且它不是来自任何类型的继承或类似的东西:
来自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现在,在该循环中,您应该能够获得给定对象的'*'属性:
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在firebug中使用此代码,我现在得到你正在寻找的一般刺痛:
Something.....
当然,你可能只是使用:
for (var pageId in data.query.pages) { if (data.query.pages.hasOwnProperty(pageId)) { console.log(data.query.pages[pageId].revisions[0]['*']); } }如果你总是只想处理
revisions
数组的第一个元素,哪个会正常工作.
请注意:在您的示例中,只有一个修订版; 我提供的代码应该能够处理很多; 由你决定你想要做些什么;-)