在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'
答案 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 对象,该对象是一个数组数组(第一行有一个字段名称的表)...