红宝石: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' ]
}
我该怎么办?
答
有一个在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])
显示代码... – tokland