如何在Rails中自定义JSON输出? [英] How to customize json output in rails?

查看:78
本文介绍了如何在Rails中自定义JSON输出?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个语言模型,我想将所有语言都获取为json,但json输出如下所示

I have a model for languages and i want to get all the languages as json but the json output looks as follows

[{"language":{"created_at":null,"id":1,"language":英语","updated_at":null}},{"language":{"created_at":null, "id":2,"language":瑞典","updated_at":null}},{"language":{"created_at":null,"id":3,"language":德语","updated_at :null}},{" language:{" created_at:null," id:4," language:"法语," updated_at:null}},{" language:{" created_at: null,"id":5,"language":西班牙语","updated_at":null}},{"language":{"created_at":null,"id":6,"language":"dutch", "updated_at":null}},{"language":{"created_at":"2012-12-03T05:01:18Z","id":7,"language":"Tamil","updated_at":"2012 -12-03T05:01:18Z}}]

[{"language":{"created_at":null,"id":1,"language":"English","updated_at":null}},{"language":{"created_at":null,"id":2,"language":"Swedish","updated_at":null}},{"language":{"created_at":null,"id":3,"language":"German","updated_at":null}},{"language":{"created_at":null,"id":4,"language":"French","updated_at":null}},{"language":{"created_at":null,"id":5,"language":"spanish","updated_at":null}},{"language":{"created_at":null,"id":6,"language":"dutch","updated_at":null}},{"language":{"created_at":"2012-12-03T05:01:18Z","id":7,"language":"Tamil","updated_at":"2012-12-03T05:01:18Z"}}]

但是我想把它做成

{"language":[{"created_at":null,"id":1,"language":英语","updated_at":null},{"created_at":null,"id":2, "language":瑞典","updated_at":null},{"created_at":null,"id":3,"language":德语","updated_at":null},{"created_at":null, "id":4,"language":法语","updated_at":null},{"created_at":null,"id":5,"language":西班牙语","updated_at":null},{ "created_at":null,"id":6,"language":"dutch","updated_at":null},{"created_at":null,"id":7,"language":"Tamil","updated_at :null}]}

{"language":[{"created_at":null,"id":1,"language":"English","updated_at":null},{"created_at":null,"id":2,"language":"Swedish","updated_at":null},{"created_at":null,"id":3,"language":"German","updated_at":null},{"created_at":null,"id":4,"language":"French","updated_at":null},{"created_at":null,"id":5,"language":"spanish","updated_at":null},{"created_at":null,"id":6,"language":"dutch","updated_at":null},{"created_at":null,"id":7,"language":"Tamil","updated_at":null} ] }

更新

def index
 @languages = Language.all
 respond_to do |format|
   format.json { render json: @languages}
 end
end

更新2

    class Language < ActiveRecord::Base
        ActiveRecord::Base.include_root_in_json = false
        has_and_belongs_to_many :users 
    end

推荐答案

我认为这应该可行:

format.json { render json: { "language" => @languages.as_json(:root => false) }.to_json }

@languages数组转换为不具有根键的JSON格式哈希模型数组的操作(使用as_json),然后将结果包装在具有根键"language"的哈希中,并且使用to_json将该哈希值转换为JSON格式的字符串. (有关包含或包含的详细信息,请参见文档不包括使用as_json的根节点.)

What this does it to convert the @languages array into an array of JSON-formatted hash models with no root keys (using as_json), then wraps the result in a hash with a root key "language", and convert that hash into a JSON-formatted string with to_json. (See the docs for details on including or not including a root node using as_json.)

例如,使用模型Post:

posts = Post.all
#=> [#<Post id: 1, name: "foo", title: "jkl", content: "some content", created_at: "2012-11-22 01:05:46", updated_at: "2012-11-22 01:05:46">]

# convert to array of hashes with no root keys
posts.as_json(root: false)
#=> [{"content"=>"some content", "created_at"=>Thu, 22 Nov 2012 01:05:46 UTC +00:00, "id"=>1, "name"=>"foo", "title"=>"jkl", "updated_at"=>Thu, 22 Nov 2012 01:05:46 UTC +00:00}]

# add root back to collection:
{ "post" => posts.as_json(root: false) }
#=> {"post"=>[{"content"=>"some content", "created_at"=>Thu, 22 Nov 2012 01:05:46 UTC +00:00, "id"=>1, "name"=>"foo", "title"=>"jkl", "updated_at"=>Mon, 03 Dec 2012 09:41:42 UTC +00:00}]}

# convert to JSON-formatted string
{ "post" => posts.as_json(root: false) }.to_json    
#=> "{\"post\":[{\"content\":\"some content\",\"created_at\":\"2012-11-22T01:05:46Z\",\"id\":1,\"name\":\"foo\",\"title\":\"jkl\",\"updated_at\":\"2012-12-03T09:43:37Z\"}]}"

这篇关于如何在Rails中自定义JSON输出?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆