Вывод массива JSON без имени класса в каждом элементе массива - PullRequest
2 голосов
/ 09 июня 2009

Способ вывода 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 ]

12 голосов
/ 09 июня 2009

Решением этой проблемы является комментирование строки
ActiveRecord::Base.include_root_in_json = true
в initializers/new_rails_defaults.rb

Или установка ActiveRecord::Base.include_root_in_json в ложь.

0 голосов
/ 09 июня 2009

JSON обычно используется для представления объектов в текстовом формате.

Так что, если вам нравится второй вывод, вы должны изменить свои объекты.

Первый вывод говорит: существует объект friends , представляющий собой массив user , у каждого пользователя есть некоторые свойства, среди которых вы выбрали выставление username, avatar_file_name, id

Второй вывод говорит: существует объект friends , который содержит user объект, который является массивом неназванных объектов, каждый неназванный объект имеет некоторые свойства ...

Этот второй вывод недоступен для записи в синтаксисе JSON.

Это может быть:

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

Это говорит: существует объект friends , который содержит user объект, который является массивом массива (таблица с именами полей в первой строке) ...

0 голосов
/ 09 июня 2009

Вы можете использовать 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++;
}

Что-то среди этих строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...