Rails:控制器中的JSON.pretty_generate(obj)不会产生漂亮的输出

ppd*_*ppd 0 json ruby-on-rails ruby-on-rails-3.2

我需要一个漂亮的JSON输出,用于rails控制器中的activerecord对象.基于jpatokal 对这个问题的回答,我尝试了以下方法:

respond_to do |format|
  format.json { render :json => JSON.pretty_generate(record) }
end 
Run Code Online (Sandbox Code Playgroud)

哪里

record 
Run Code Online (Sandbox Code Playgroud)

是一个活跃的记录对象.它不会产生美化输出.但是,当我尝试使用相同的代码输出哈希时,即,

respond_to do |format|
  format.json { render :json => JSON.pretty_generate({"abc" => "1", "def" => "2"}) }
end 
Run Code Online (Sandbox Code Playgroud)

它确实产生了一个美化输出(所以pretty_generate正在工作,我的浏览器也是如此).

如何使用pretty_generate生成activerecord对象的漂亮输出?

小智 5

要从活动记录对象获得相当多的JSON输出,您必须首先将对象请求为JSON.

record.as_json
Run Code Online (Sandbox Code Playgroud)

上面的代码将为您执行此操作,从控制器呈现漂亮的JSON的简短方法是:

render json: JSON.pretty_generate(record.as_json)
Run Code Online (Sandbox Code Playgroud)

这也解决了"only generation of JSON objects or arrays allowed"尝试将AR对象转换为pretty_generateJSON时可能出现的错误.


编辑:我忘了提到这一切都可以rails 4.1.8使用与rails项目一起打包的标准jsonmulti-json宝石在上面(甚至更早)完成.