Ruby:如何将数据数组转换为hash和json格式?

我是Ruby数组和哈希操作的新手。

我该怎么做这个简单的转换?

array = [#, #, #] 

json中所需的输出:

 [{id : 1, car : 'red'} , {id:2, car :'yellow'} ,{id:3 , car: "green"}] 

有人有任何提示吗?

 array.map { |o| Hash[o.each_pair.to_a] }.to_json 

struct对象的数组转换为hash数组,然后调用to_json 。 您需要使用json (ruby 1.9)才能使用to_json方法。

 array.collect { |item| {:id => item.id, :car => item.car} }.to_json 

默认情况下,使用json ruby​​ gem编码为json时,Struct实例将显示为字符串:

 require 'json' array = [#, #, #] # assuming real structure code in the array puts array.to_json 

版画

 ["#", "#", "#"] 

这显然不是你想要的。

下一个逻辑步骤是确保您的结构实例可以正确地序列化为JSON,以及从JSON创建。

为此,您可以更改结构的声明:

 YourStruct = Struct.new(:id, :car) class YourStruct def to_json(*a) {:id => self.id, :car => self.car}.to_json(*a) end def self.json_create(o) new(o['id'], o['car']) end end 

所以你现在可以写下面的内容:

 a = [ YourStruct.new(1, 'toy'), YourStruct.new(2, 'test')] puts a.to_json 

打印

 [{"id": 1,"car":"toy"},{"id": 2,"car":"test"}] 

并从JSON反序列化:

 YourStruct.json_create(JSON.parse('{"id": 1,"car":"toy"}')) # => #