奇怪的JSON行为?
问题描述:
我想将对象转换为JSON,然后再解析它。问题是,当我解析JSON字符串时,我留下了一个哈希而不是我的原始对象。我发现这个简单的例子,在json.rubyforge.com和试了一下:奇怪的JSON行为?
require 'json'
class Range
def to_json(*a)
{
'json_class' => self.class.name,
'data' => [ first, last, exclude_end? ]
}.to_json(*a)
end
def self.json_create(o)
new(*o['data'])
end
end
puts JSON.parse((1..10).to_json) == (1..10)
这也将失败,返回false
。进一步看起来好像并没有json_create
被调用。
在这一点上,我想我必须失去一些简单的东西,或者我已经遇到了一个错误的地方。我正在使用Ruby 1.9.3。有人有主意吗?
答
p392中的这种行为变化是由于security fix引起的。有关更多详细信息,请参阅p392 release announcement。
你的代码,是用另外在您的通话将:create_additions
选项来JSON.parse
:
require 'json'
class Range
def to_json(*a)
{
'json_class' => self.class.name,
'data' => [ first, last, exclude_end? ]
}.to_json(*a)
end
def self.json_create(o)
new(*o['data'])
end
end
puts JSON.parse((1..10).to_json, :create_additions => true) == (1..10)
+0
感谢您的信息史蒂夫! – marcantonio 2013-03-01 21:28:35
我'1.9.3'试过相同。 'JSON.parse((1..10).to_json)==(1..10)'给出'true' – codeit 2013-03-01 18:05:50
'2.0.0'版本正常返回'true'。 – mudasobwa 2013-03-01 18:21:44
我也只是在1.9.3上运行这个代码,它是着名的。 1)您是否还有其他图书馆? 2)究竟是什么版本的红宝石? 1.9.3-P385? P392?您正在使用的json库的功能存在安全问题,因此它可能已被更新并且工作方式略有不同,具体取决于您安装的是哪个版本的Ruby和/或JSON gem。 – 2013-03-01 18:21:45