61

RubyでXMLをJSONに変換するライブラリはありますか?

4

7 に答える 7

25

シンプルな XML および JSON パーサーであるCrackを使用します。

require "rubygems"
require "crack"
require "json"

myXML  = Crack::XML.parse(File.read("my.xml"))
myJSON = myXML.to_json
于 2010-10-01T04:17:28.273 に答える
13

すべての属性を保持したい場合は、bagerfish 規則を使用する cobravsmongoose http://cobravsmongoose.rubyforge.org/をお勧めします 。

<alice sid="4"><bob sid="1">charlie</bob><bob sid="2">david</bob></alice>

になります:

{"alice":{"@sid":"4","bob":[{"$":"charlie","@sid":"1"},{"$":"david","@sid":"2"}]}}

コード:

require 'rubygems'
require 'cobravsmongoose'
require 'json'
xml = '<alice sid="4"><bob sid="1">charlie</bob><bob sid="2">david</bob></alice>'
puts CobraVsMongoose.xml_to_hash(xml).to_json
于 2011-01-27T17:32:50.310 に答える
2

libxmlを使用していると仮定すると、これのバリエーションを試すことができます(免責事項、これは私の限られたユースケースで機能します。完全に汎用的にするには微調整が必​​要になる場合があります)

require 'xml/libxml'

def jasonized
  jsonDoc = xml_to_hash(@doc.root)
  render :json => jsonDoc
end

def xml_to_hash(xml)
  hashed = Hash.new
  nodes = Array.new

  hashed[xml.name+"_attributes"] = xml.attributes.to_h if xml.attributes?
  xml.each_element { |n| 
    h = xml_to_hash(n)
    if h.length > 0 then 
      nodes << h 
    else
      hashed[n.name] = n.content
    end
  }
  hashed[xml.name] = nodes if nodes.length > 0
  return hashed
end
于 2011-02-22T15:35:34.373 に答える