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

Rails: JSON.pretty_generate(obj) in the controller does not produce pretty output

对于Rails控制器中的ActiveRecord对象,我需要一个相当好的JSON输出。基于jpatokal对这个问题的回答,我尝试了以下方法:

1
2
3
respond_to do |format|
  format.json { render :json => JSON.pretty_generate(record) }
end

在哪里?

1
record

是ActiveRecord对象。它不会产生一个经过美化的输出。但是,当我尝试使用相同的代码输出哈希时,即,

1
2
3
respond_to do |format|
  format.json { render :json => JSON.pretty_generate({"abc" =>"1","def" =>"2"}) }
end

它确实会生成一个经过预处理的输出(因此,漂亮的生成工作正常,我的浏览器也工作正常)。

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


要从活动记录对象获得JSON的漂亮输出,您必须首先以JSON的形式请求该对象。

1
record.as_json

上面的代码将为您实现这一点,从控制器中呈现漂亮的JSON的捷径是:

1
render json: JSON.pretty_generate(record.as_json)

这也解决了您可以尝试将ar对象转换为pretty_generatejson的"only generation of JSON objects or arrays allowed"错误。

编辑:我忘了提一下,这一切都可以在rails 4.1.8及以上版本(可能更早)中使用标准的jsonmulti-jsongems,这些gems与rails项目一起打包。