【问题标题】:Ruby find key by name inside converted JSON array of hashesRuby 在转换后的 JSON 哈希数组中按名称查找键
【发布时间】:2014-09-08 22:29:43
【问题描述】:

我有一个从 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. 到达 *,我无法到达它。然后我需要想办法解析Infobox的内容。
  • revisions的第一个数组元素中,大致是[:query][:pages]["743958"][:revisions][0]["*"]. Parsing it totally depends on what the data *actually* looks like, it could be as simple as splitting on }}\n{{`,可能会更糟。
  • 是的,我知道的就这么多,我的问题,如原始问题中所述,是如何在我不知道名称的情况下一直遍历到* 并获取其数据它前面的键?具体是身份证。问题不清楚,我可以编辑它吗?
  • 如果您不知道 id,那么这取决于您要获取的数据。如果您只返回一个 ID,那么这很明显。如果您返回多个 ID,那么这很明显,但需要迭代。

标签: ruby json hash


【解决方案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..."] 

【讨论】:

  • 是的!就是这样!我就是想不通,非常非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 2010-10-18
相关资源
最近更新 更多