【问题标题】:Ruby: XML to JSON tree parsingRuby:XML 到 JSON 树的解析
【发布时间】:2012-01-01 05:11:03
【问题描述】:

我有以下 XML:

<fruits>
    <fruit>APPLE</fruit>
    <fruit>PEACH</fruit>
    <fruit>BANANA</fruit>
</fruits>

当我将其解析为 JSON 或对象时,我得到以下信息:

{
    "fruits": {
        "fruit": [
            'APPLE', 'PEACH', 'BANANA'
        ]
    }
}

但我想要关注:

{
    "fruits": [ 'APPLE', 'PEACH', 'BANANA' ]
}

我该怎么办?

【问题讨论】:

  • 显示代码...

标签: ruby xml json parsing


【解决方案1】:

XmlSimple 中有一个名为“GroupTags”的选项,用于在 XML 到哈希的转换中执行您想要的操作。当您要分组的标签不是根时,它似乎可以工作。

例如,如果你的 xml 实际上有一个不同的根元素:

<root>
 <fruits>
  <fruit>APPLE</fruit>
  <fruit>PEACH</fruit>
  <fruit>BANANA</fruit>
 </fruits>
</root>

然后您可以执行以下操作:

options = {
           'ForceArray' => false, 
           'GroupTags' => {'fruits'=>'fruit'}
          }
XmlSimple.xml_in(xml, options)

#=> {"fruits"=>["APPLE", "PEACH", "BANANA"]}

与您要查找的 JSON 相对应。

很遗憾,如果 &lt;fruits&gt; 是您的根元素,则 GroupTags 选项不会生效。

【讨论】:

    【解决方案2】:

    类似的东西?

    #!/usr/bin/env ruby
    require 'json'
    require 'nokogiri'
    
    xml = Nokogiri::XML(<<XML)
    <fruits>
      <fruit>APPLE</fruit>
      <fruit>PEACH</fruit>
      <fruit>BANANA</fruit>
    </fruits>
    XML
    
    results =
      xml.xpath('/*').map{|parent|
        [ parent.name,
          parent.xpath('*').map{|child| child.text } ] }
    
    puts JSON.pretty_unparse(Hash[results])
    

    【讨论】:

      猜你喜欢
      • 2014-03-18
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多