Ruby在转换后的JSON哈希数组中按名称查找键

时间:2014-09-08 10:58:13

标签: ruby json hash

我有一个从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哈希。我似乎无法接受它。其他条目可能不存在pagespageid哈希值,当然ID也不同。

我尝试过各种我能想到的方法,例如.map.select.find.include?等无效,因为它们不是递归,不会进入每个键和数组。

我在StackOverflow中看到的所有答案都是在一维数组中按名称获取值,这对我们没有帮助。

如何从中获取Infobox数据?

1 个答案:

答案 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..."]