【问题标题】:Ruby on Rails JSON serializationRuby on Rails JSON 序列化
【发布时间】: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

标签: ruby-on-rails ruby json serialization


【解决方案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

应该可以解决您的问题。

【讨论】:

  • 谢谢——正是我要找的东西
猜你喜欢
  • 2010-10-11
  • 2023-03-29
  • 2023-03-13
  • 2010-10-10
  • 2014-12-10
  • 2012-01-28
  • 2011-05-10
  • 2016-11-21
  • 2016-07-14
相关资源
最近更新 更多