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_jsonhere。

选项 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:自定义序列的使用

Ruby on Rails - 来自 Paypal 的参数:utf-8 中的无效字节序列

Ruby on Rails“由于bot而导致的UTF-8中无效的字节序列”