ruby-on-rails - 如何在rails中自定义json输出?

标签 ruby-on-rails ruby-on-rails-3 json

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

[{"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":"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),然后将结果包装在带有根键“语言”的散列中,并使用 to_json 将该散列转换为 JSON 格式的字符串。 . (有关使用 as_json 包含或不包含根节点的详细信息,请参阅 the docs。)

例如,使用模型 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\"}]}"

关于ruby-on-rails - 如何在rails中自定义json输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13678092/

相关文章:

Python 请求返回 JSON 解码器错误

ios - Web 服务值未出现在标签中

ruby-on-rails - 晒干萝卜步骤定义

mysql - 使用不同的数据库执行单个查询。 Rails 上的 Ruby

ruby-on-rails - 在 Maverick 的 Rails 中安装 Ruby 时出错

ruby-on-rails - 在 Rails 中过滤关系

sql - 任何人都可以发布等效的 rails 3 sql 语句吗?

ruby-on-rails-3 - Mongoid 和 ActiveRecord 生成器

ruby-on-rails - 如何按照 json api 规范使用 rswag 创建?

python - 一对多加入 pandas 数据帧作为 JSON 而不是 pandas 数据帧