Ruby on Rails JSON 序列化
Posted
技术标签:
【中文标题】Ruby on Rails JSON 序列化【英文标题】:Ruby on Rails JSON serialization 【发布时间】:2011-07-05 09:07:51 【问题描述】:我是 Ruby on Rails 的新手,所以如果这是一个明显的问题,请原谅我。
我从控制器方法返回一个 JSON 对象(假设类名是“foo”并且它有一个属性“bar”)。
我希望这会序列化为:
"bar" : "barValue"
但是,它似乎序列化为
"foo" : "bar" : "barValue"
这似乎与 a.) 其他语言的作用,b.)(更重要的是)javascript 的作用不相符。
假设我在 Javascript 中定义了相同的类 foo:
var fooInstance = new Foo();
fooInstance.bar = "barValue";
然后我使用 Javascript JSON 库之一(例如 https://github.com/douglascrockford/JSON-js )对其进行字符串化。然后输出类似于:
"bar" : "barValue"
但是我的控制器方法的输入(以及输出)期望:
"foo" : "bar" : "barValue"
所以我必须按照这些思路编写代码才能使其工作:
var fooInstance = new Foo();
fooInstance.bar = "barValue";
var dummyObjectToKeepRailsHappy = foo : fooInstance;
那么- 我是在错误地进行 Rails 序列化吗?或者有什么理由让它这样工作?
【问题讨论】:
如果你正在使用 ActiveRecord 对象,你可以在 application.rb 中设置config.active_record.include_root_in_json = false
【参考方案1】:
阅读有关 Rails 的文档to_json
here。
选项 ActiveRecord::Base.include_root_in_json 控制顶层行为 to_json。在一个新的 Rails 应用程序中, 它设置为真 初始化程序/new_rails_defaults.rb。 当它为真时,to_json 将发出一个 以单个根节点命名 对象的类型。
所以添加到你的 environment/application.rb
config.active_record.include_root_in_json = true
应该可以解决您的问题。
【讨论】:
谢谢——正是我要找的东西以上是关于Ruby on Rails JSON 序列化的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails 序列化然后反序列化 JSON 中的同一个对象
Ruby On Rails 中的编组与 ActiveRecord 序列化
使用 Ruby on Rails 从数据库中的 yaml 序列化字段中获取大小数
Ruby on Rails+PostgreSQL:自定义序列的使用