【发布时间】:2011-05-10 21:48:45
【问题描述】:
我花了几天的时间尝试所有的 JSON 库,包括 JSON gem、Yajl-ruby、ActiveSupport::JSON,但没有什么可以做这个简单的任务:
user = User.find(1)
json = user.to_json
user2 = json.as_json # OR json.from_json
# OR JSON.parse(json)
# OR Yajl::Parser.parse(json)
# OR ActiveSupport::JSON.decode(json)
当我尝试使用反序列化的 JSON 数据创建新用户时,我收到以下错误之一:
User.new(Yajl::Parser.parse(json))
# ActiveRecord::UnknownAttributeError: unknown attribute: json_class
User.new(json.as_json)
# NoMethodError: undefined method `stringify_keys!' for #<String:0xb6de4318>
User.new(JSON.parse(json))
# NoMethodError: undefined method `stringify_keys!' for #<User:0xb6dc7470>
User.new(ActiveSupport::JSON.decode(json))
# NoMethodError: undefined method `stringify_keys!' for #<User:0xb6da3764>
使用 to_yaml 和 from_yaml 使用 YAML 很容易做到这一点。为什么 to_json 不能生成 from_json 可以转换回 ruby 对象的那种 JSON?
编辑:我使用的是 Rails 2.3.8,虽然我尝试过 2.3.5 和 3.0.0。另外,我正在使用 json-rpc 插件来创建 JSON-RPC 服务,尽管没有插件时同样的问题仍然存在。
【问题讨论】:
-
你确定你的 json 是真的 json 吗?就错误而言,它似乎更像是用户对象:(
标签: ruby-on-rails json