在每个数组元素中输出没有类名的JSON数组

时间:2009-06-09 09:44:25

标签: ruby-on-rails ruby arrays json

在rails中输出JSON的默认方式是: 代码:
render :json => friends.to_json(:only => [:username, :avatar_file_name, :id ])

输出

{"friends" : 
  [{"user": 
    {"avatar_file_name": "image1.jpg", "username": "user1", "id": 1}},
   {"user": 
    {"avatar_file_name": "image2.jpg", "username": "user2", "id": 2}},
   {"user":
    {"avatar_file_name": "image3.jpg", "username": "user3", "id": 3}}
  ]}

但我想要的是:

{"friends" : 
    {"user": [
      {"avatar_file_name": "image1.jpg", "username": "user1", "id": 1},
      {"avatar_file_name": "image2.jpg", "username": "user2", "id": 2},
      {"avatar_file_name": "image3.jpg", "username": "user3", "id": 3}
    ]}
}

该类由数组名称指定 Last.fm也使用此语法,请参阅Last.fm 'API-user.getfriends'

3 个答案:

答案 0 :(得分:12)

这个问题的解决方案是评论线路 ActiveRecord::Base.include_root_in_json = true
initializers/new_rails_defaults.rb

或将ActiveRecord::Base.include_root_in_json设为false。

答案 1 :(得分:0)

您可以使用javascript重新格式化:

var json = 
{
  "friends" : 
  { "user": [] }
}

var i = 0;
for ( x in friends )
{
     json.friends.user[i].avatar_file_name = x.user.avatar_file_name; // add more fields.
     i++;
}

这些方面的东西。

答案 2 :(得分:0)

JSON通常用于以文本格式表示对象。

因此,如果您喜欢secon输出,则必须更改对象。

第一个输出说: 有一个朋友对象是用户的数组,每个用户都有一些属性,您选择在这些属性中公开 username,avatar_file_name,id < / p>

第二项输出说: 有一个 friends 对象,其中包含一个 user 对象,该对象是一个未命名对象的数组,每个未命名的对象都有一些属性......

第二个输出在JSON语法中不可写。

可能是:

{"friends" : 
    {"user": [
      ["avatar_file_name", "username", "id"],
      ["image1.jpg", "user1", 1],
      ["image2.jpg", "user2", 2],
      ["image3.jpg", "user3", 3]
    ]}
}

这说: 有一个 friends 对象,其中包含一个 user 对象,该对象是一个数组数组(第一行有一个字段名称的表)...