在CentOS 6.4的RVM下解析JSON与Ruby 1.9.3-p392
时遇到了一个奇怪的问题。不是将嵌入对象解码到适当的Ruby类中,而是将该对象作为散列加载。在Ruby 1.9.3-p194
它工作正常。Ruby 1.9.3 JSON解析
看看下面的示例:
require 'json'
class TestMe
attr_accessor :me
def initialize(option_hash = nil)
if option_hash
@me = option_hash['me']
end
@me ||= "Hello"
end
def to_json(*a)
{
JSON.create_id => self.class.name,
'data' => {
"me" => @me
}
}.to_json(*a)
end
def self.json_create(o)
new(o['data'])
end
end
t = TestMe.new
t.me = "foo"
t2 = JSON.parse(t.to_json)
puts t2
如果我在Ruby 1.9.3-p194
运行它,它输出以下:
#<TestMe:0x00000001c877f0>
如果我运行Ruby 1.9.3-p392
相同片段,它输出如下:
{"json_class"=>"TestMe", "data"=>{"me"=>"foo"}}
的行为p194
是我期望和文件意味着什么。为什么不是p392
正确解析JSON数据?
我也得到2.0.0中的p392行为,所以这必须是一个预期的改变。 – Linuxios 2013-05-01 00:51:40
我是否错过描述此更改的文档中的任何明显内容?我的意思是......它不是向后兼容的...... – organicveggie 2013-05-01 00:56:32
这可能与最近的[安全通报](https://support.cloud.engineyard.com/entries/23143553-Security-February-11th-2013-Rails - 和 - JSON - 漏洞)和补丁到Rails。这可能是一个非常慎重的改变。默认情况下允许任意实例化Ruby对象,这被认为是一种中立的纯数据传输方法,从来就不是一个好主意。 – tadman 2013-05-01 03:22:00