ActiveRecord: Produce multi-line human-friendly json
使用activeRecord::base.to_json i do:
1 2 3 | user = User.find_by_name 'Mika' {"created_at":"2011-07-10T11:30:49+03:00","id":5,"is_deleted":null,"name":"Mika"} |
现在,我想要的是:
1 2 3 4 5 6 | { "created_at":"2011-07-10T11:30:49+03:00", "id":5, "is_deleted":null, "name":"Mika" } |
号
有选择吗?
拥有一个全局选项是很好的,这样行为就可以根据开发人员/实时环境进行设置。
我要冒险说"不,没有这样的选择"。
实际上,JSON编码是由ActiveSupport处理的,而不是ActiveRecord。如果您在activesupport gem中查看
1 2 3 4 | # comments removed for clarity def encode_json(encoder) "{#{map { |k,v|"#{encoder.encode(k.to_s)}:#{encoder.encode(v, false)}" } * ','}}" end |
在JSonification期间,所有复杂的类看起来都是散列或数组,因此理论上,您可以将自己的monkey补丁添加到散列和数组中,以使它们产生漂亮的效果。但是,您可能在跟踪结构的深度时遇到一些困难,因此无法生成:
1 2 3 4 5 6 7 8 9 10 | { "created_at":"2011-07-10T11:30:49+03:00", "id":5, "is_deleted":null, "name":"Mika" "nested":{ "not":"so pretty now", "is":"it" } } |
号
会很直接,但是:
1 2 3 4 5 6 7 8 9 10 | { "created_at":"2011-07-10T11:30:49+03:00", "id":5, "is_deleted":null, "name":"Mika" "nested": { "not":"so pretty now", "is":"it" } } |
可能会更难,而且您可能会想要后者,尤其是对于深度嵌套的JSON,在这种情况下,观察结构是很困难的。你也许可以在通过的
一个更可行的选项是输出过滤器,在将JSON发送到浏览器之前解析并重新格式化它。你得借用或建造漂亮的打印机,但那不应该那么困难。您应该能够有条件地只为您的开发环境附加这个过滤器,而不会有太多的丑陋之处。
如果您只是想调试基于JSON的交互,那么火狐的JSONovich扩展可能就不那么麻烦了。jsonovich有一些好的特性(比如扩展和折叠嵌套结构),这些特性也超越了简单、漂亮的打印。
顺便说一句,我查看了Rails 3.0和3.1,如果您感兴趣,可以查看Rails 2。
你考虑过JSON宝石吗?我相信这正是你想要的。
例如
1 | JSON.pretty_generate(user) |
。
看看这里的细节…
http://apidock.com/ruby/json/pretty_生成