2

我正在尝试将对象转换为 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。有人有想法么?

4

1 回答 1

6

p392 中的这种行为变化是由于安全修复。有关详细信息,请参阅p392 发布公告

您的代码: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)
于 2013-03-01T19:41:41.080 回答