【发布时间】:2011-09-18 07:57:37
【问题描述】:
Ruby on Rails 将“as_json”方法添加到许多通用类中,它将 ActiveRecord 对象转换为哈希对象,然后可以将其发送到 JSON 序列化程序。最近我在我的代码中遇到了一个与此方法相关的错误,它是对布尔值的处理。
我可以很简洁地总结一下这个bug:
{"foo" => true}.as_json
我希望这个方法返回一个相同的哈希值。相反,它返回
{"foo" => "true"}
这似乎是设计使然,根据 encoding.rb 中的第 157 行
AS_JSON = ActiveSupport::JSON::Variable.new('true').freeze
请问,为什么 rails 会返回字符串值“true”而不是将其保留为真正的布尔值?
我的错误如下:我将 JSON 序列化的对象保存在缓存中。当我将它们从缓存中拉出时,我将它们保留为哈希以避免不必要的对象反序列化。如果在缓存中找不到它,我将对象从数据库中拉出并调用 as_json 。我希望我从缓存中提取的内容和从 as_json 返回的内容是相同的。它们不是,因为从缓存中出来的是 {"foo" => true} 而从 as_json 返回的是 {"foo" => "true"}
【问题讨论】:
标签: ruby-on-rails json serialization activerecord