通过HTTP,Ruby(无ROR)序列化/反序列化对象

时间:2013-10-23 13:17:46

标签: ruby-on-rails ruby json serialization

对此已有类似的问题,但我对答案不满意,因为我正在尝试做一些更复杂的事情。

我有提供列表/单个对象的Web服务。对象是用户,类别等。以下是对象的示例:

<UserObject name="foo" description="bar" category=<Category name="cat1" description="bar"> locations=[<Location id=1>, <Location id=2>] >

换句话说,对象有点复杂,可以是这些对象的数组。我正在寻找一种方法:

  • 将这些对象序列化为JSON或Hash字符串
  • 通过HTTP发送
  • 将它们反序列化为OpenStruct对象

序列化对象的服务不是ROR。 正在接收和反序列化对象的应用程序是ROR。

必须有一些通用的方法来执行此操作,我尝试使用to_jsonJSON.parse,但它只将对象反序列化为一个级别。所以例如上面我会得到:

<OpenStruct name="foo" description="bar" category="{\"name\"... JSON STRING}" locations="JSON STRING">

我希望在对象内部获取原始对象,而不是JSON STRING。

Ruby:1.9.3

由于

2 个答案:

答案 0 :(得分:2)

看看oj宝石。它允许您对来自json的ruby对象进行序列化和反序列化。它还具有非常快的优点。

答案 1 :(得分:0)

在研究了oj宝石并联系了它的创造者彼得·奥勒(Peter Ohler)之后,他非常友善和帮助,我能够获得理想的效果。

require 'oj'

# user instance is nested instance
json_string = Oj.dump user

# send over http
# de-serialize without domain classes (classes created by Oj gem)
user = Oj.load(json_string, { :auto_define => true })

感谢@ josh-voigts让我知道宝石。