Ruby:XML 到 JSON 树解析

发布于 2024-12-16 22:10:48 字数 449 浏览 1 评论 0原文

我有以下 XML:

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

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

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

但我想要以下内容:

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

我应该做什么?

I have following XML:

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

When I parse it to JSON or object I get following:

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

But I want following:

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

What should I do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一抹苦笑 2024-12-23 22:10:48

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。

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

There's an option in XmlSimple called "GroupTags" that is intended to do what you want in an XML-to-Hash conversion. It appears to work when the tag you want grouped is NOT the root.

For example, if your xml actually has a different root element in it:

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

Then you can do the following:

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

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

Which corresponds to the JSON you are looking for.

Unfortunately, if <fruits> is your root element, the GroupTags option doesn't take effect.

债姬 2024-12-23 22:10:48

有类似的东西吗?

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

Something along these lines?

#!/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])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文