Как дать правильный формат этого ответа JSON в Rails 5? - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь отформатировать JSON-ответ от Spotify API, я попробовал несколько методов, но ни один из них не соответствует желаемому формату, я ценю вашу помощь, поскольку я новичок в RoR.

Я пыталсяиспользуя некоторые методы, такие как pretty_generate() и neat_generate, но я не могу понять, как правильно установить формат, также я использую гем Spotify для извлечения данных из API.


    render json: JSON.neat_generate(@artists.as_json)

этовывод я получаю:

[
  {
    "id":1,
    "name":"Metallica",
    "image":"{\"height\"=>640, \"url\"=>\"https://i.scdn.co/image/
     5a06711d7fc48d5e0e3f9a3274ffed3f0af1bd91\", \"width\"=>640}",
    "genres":"[\"alternative metal\", \"hard rock\", \"metal\", \"old school 
     thrash\", \"rock\", \"speed metal\", \"thrash metal\"]",
    "popularity":"86",
    "spotify_url":"spotify:artist:2ye2Wgw4gimLv2eAKyk1NB",
    "spotify_id":"2ye2Wgw4gimLv2eAKyk1NB",
   },
  {
    "id":2,
    "name":"Diomedes Diaz",
    "image":"{\"height\"=>640, 
    \"url\"=>\"https://i.scdn.co/image/
    c3b77cdff8b152466447e4573c45613b06fbcf1b\", \"width\"=>640}",
    "genres":"[\"cumbia\", \"vallenato\"]",
    "popularity":"61",
    "spotify_url":"spotify:artist:66NweiA3nU84k1S3SZdTSG",
    "spotify_id":"66NweiA3nU84k1S3SZdTSG",
   },
]

Но ожидаемый вывод должен быть таким:

{
  data: [
    {
      name: "song One",
      spotify_url: 
      "https://api.spotify.com/v1/tracks/0O3xlhTJPTrGevY2FnYUQC",
      preview_url: "https://p.scdn.co/mp3- 
      preview/7a7becf24a93022ae9068ac3cb2e88e61563e268",
      duration_ms: 9870,
      explicit: true
    },
    {
      name: "song Two",
      spotify_url: 
      "https://api.spotify.com/v1/tracks/0O3xlhTJPTrGevY2FnYUQC",
      preview_url: "https://p.scdn.co/mp3- 
      preview/7a7becf24a93022ae9068ac3cb2e88e61563e268",
      duration_ms: 9870,
      explicit: true    
    }
  ]
}

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Получить данные в объекте и использовать метод to_json.

Пример:

puts student.to_json 
0 голосов
/ 24 июня 2019

Хорошо, есть верный способ сделать это, и давайте начнем работать. Давайте сделаем последнее, потому что младшему легче понять:

Быстрый путь

Ниже приведен код sudo. Вам придется это исправить.

artists = [
  {
    "id":1,
    "name":"Metallica",
    "image":"{\"height\"=>640, \"url\"=>\"https://i.scdn.co/image/
     5a06711d7fc48d5e0e3f9a3274ffed3f0af1bd91\", \"width\"=>640}",
    "genres":"[\"alternative metal\", \"hard rock\", \"metal\", \"old school 
     thrash\", \"rock\", \"speed metal\", \"thrash metal\"]",
    "popularity":"86",
    "spotify_url":"spotify:artist:2ye2Wgw4gimLv2eAKyk1NB",
    "spotify_id":"2ye2Wgw4gimLv2eAKyk1NB",
    "created_at":"2019-06-23T17:27:11.893Z",
    "updated_at":"2019-06-23T17:27:11.893Z"
  },
  {
    "id":2,
    "name":"Diomedes Diaz",
    "image":"{\"height\"=>640, 
    \"url\"=>\"https://i.scdn.co/image/
    c3b77cdff8b152466447e4573c45613b06fbcf1b\", \"width\"=>640}",
    "genres":"[\"cumbia\", \"vallenato\"]",
    "popularity":"61",
    "spotify_url":"spotify:artist:66NweiA3nU84k1S3SZdTSG",
    "spotify_id":"66NweiA3nU84k1S3SZdTSG",
    "created_at":"2019-06-23T17:27:12.024Z",
    "updated_at":"2019-06-23T17:27:12.024Z"
  },
]

array = artists.map do |artist|
  {
    name: artist['name'],
    spotify_url: artist['spotify_url'],
    # The below attributes I dont know how to get because they're not in the response
    # preview_url: "https://p.scdn.co/mp3- 
    # preview/7a7becf24a93022ae9068ac3cb2e88e61563e268",
    # duration_ms: 9870,
    # explicit: true
  }
end

Тогда сделай это

render json: { data: array }

Другой вариант

Я нахожу архитектуру немного странной. Я предполагаю, что у вас есть архитектура типа бэкэнда и внешнего интерфейса. Почему бы просто не вернуть именно то, что Spotify дает вам веб-интерфейсу. Затем используйте необходимые атрибуты внешнего интерфейса.

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