4

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

我有提供列表/单个对象的网络服务。对象是用户、类别等。这是对象的示例:

<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 STRINGs 我想在对象内部获取对象,因为它是原始的。

红宝石:1.9.3

谢谢

4

2 回答 2

2

看看oj宝石。它允许您在 json 之间序列化和反序列化 ruby​​ 对象。它还具有速度非常快的好处。

于 2013-10-23T13:42:04.207 回答
0

在研究了oj gem 并联系了它的创建者 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 让我了解这颗宝石。

于 2013-10-24T08:28:08.247 回答