奇怪的JSON行为?

时间:2013-03-01 17:52:25

标签: ruby json

我正在尝试将对象转换为JSON,然后再次解析它。问题是,当我解析JSON字符串时,我留下的是Hash,而不是我的原始对象。我在json.rubyforge.com找到了这个简单的例子并试了一下:

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。有人有什么想法吗?

1 个答案:

答案 0 :(得分:6)

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)