Форматирование данных JSON, полученных из базы данных PostgreSql - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь отобразить мои начальные данные в формате JSON, когда пользователь посещает определенную конечную точку. У меня есть две таблицы, плейлисты и избранное. Это отношение один ко многим, когда в плейлисте много избранных. JSON должен быть отформатирован так:

[{
    "id": 1,
    "playlist_name": "Favorite songs of all time",
    "favorites": [{
        "id": 1,
        "name": "We Will Rock You",
        "artist_name": "Queen",
        "genre": "Rock",
        "rating": 88
    }]
}]

Функция, которую я вызываю для извлечения данных из базы данных:

const connection = require("../connection");

function getAll() {
  return connection.select().from('playlists').join('favorites', 'playlists.id', '=', 'favorites.id')
}

module.exports = getAll;

И когда я вызываю эту функцию, я получаю следующее:

[
  {
    "id": 1,
    "playlist_name": "chill_tunes",
    "name": "Leo",
    "artist_name": "John",
    "genre": "Pop",
    "rating": 42,
    "playlist_id": 1
  },
  {
    "id": 2,
    "playlist_name": "good_vibes",
    "name": "Dan",
    "artist_name": "Deer",
    "genre": "Rock",
    "rating": 52,
    "playlist_id": 1
  },
  {
    "id": 3,
    "playlist_name": "hump_day_happiness",
    "name": "Nick",
    "artist_name": "Legend",
    "genre": "Rap",
    "rating": 12,
    "playlist_id": 2
  }
]

Я понятия не имею, как отформатировать мои данные JSON, чтобы получить их как верхний код. Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 24 марта 2019

Вы можете использовать уменьшить

Здесь идея

  • На op объект создает ключи на основе идентификатора плейлиста.
  • Если ключ уже есть, мы переводим новое значение в favourites
  • Если нет, то мы инициализируем favourites с помощью {id, playlist_name , favourites:[]} и затем выдвигаем новое значение

let arr = [{"id": 1,"playlist_name": "chill_tunes","name": "Leo","artist_name": "John","genre": "Pop","rating": 42,"playlist_id": 1},{"id": 2,"playlist_name": "good_vibes","name": "Dan","artist_name": "Deer","genre": "Rock","rating": 52,"playlist_id": 1},{"id": 3,"playlist_name": "hump_day_happiness","name": "Nick","artist_name": "Legend","genre": "Rap","rating": 12,"playlist_id": 2}]

let final = arr.reduce((op,{id, playlist_name ,name ,artist_name ,genre ,rating , playlist_id}) => {
  op[playlist_id] = op[playlist_id] || {id, playlist_name , favourites:[]}
  op[playlist_id].favourites.push({id, playlist_id ,name ,artist_name ,genre ,rating})
  return op
},{})

console.log(Object.values(final))
...