我有一个从JSON数据转换的Ruby哈希,它看起来像这样:
{ :query => {
:pages => {
:"743958" => {
:pageid => 743958,
:ns => 0,
:title => "Asterix the Gaul",
:revisions => [ {
:contentformat => "text/x-wiki",
:contentmodel => "wikitext",
:* => "{{Cleanup|date=April 2010}}\n{{Infobox graphic novel\n<!--Wikipedia:WikiProject Comics-->...
所有好东西都在revisions
数组内,然后是Infobox
哈希。
我遇到的问题是转到Infobox
哈希。我似乎无法接受它。其他条目可能不存在pages
和pageid
哈希值,当然ID也不同。
我尝试过各种我能想到的方法,例如.map
,.select
,.find
,.include?
等无效,因为它们不是递归,不会进入每个键和数组。
我在StackOverflow中看到的所有答案都是在一维数组中按名称获取值,这对我们没有帮助。
如何从中获取Infobox
数据?
答案 0 :(得分:1)
这是你正在寻找的吗?
pp data
=> {:query=> {:pages=>
{:"743958"=>
{:pageid=>743958,
:ns=>0,
:title=>"Asterix the Gaul",
:revisions=>
[{:contentformat=>"text/x-wiki",
:contentmodel=>"wikitext",
:*=>"{{Cleanup..."}]}}}}
# just return data from the first revisionb
data[:query][:pages].map{|page_id,page_hash| page_hash[:revisions].first[:"*"]}
=> ["{{Cleanup..."]
# get data from all revisions
data[:query][:pages].map{|page_id,page_hash| page_hash[:revisions].map{|revision| revision[:"*"] }}.flatten
=> ["{{Cleanup..."]