红宝石:XML到JSON树解析

红宝石:XML到JSON树解析

问题描述:

我有以下XML:红宝石:XML到JSON树解析

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

当我将它解析为JSON或对象我得到以下几点:

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

,但我想以下几点:

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

我该怎么办?

+6

显示代码... – tokland

有一个在XmlSimple称那是为了你在XML到散列转换想要什么“GroupTags”的选项。当你想要分组的标签不是根目录时,它似乎工作。

例如,如果你的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。

不幸的是,如果<fruits>是您的根元素,则GroupTags选项不生效。

沿着这些线?

#!/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])