簡體   English   中英

格式化從PostgreSql數據庫檢索的JSON數據

[英]Formatting JSON data retrieved from PostgreSql database

當用戶訪問某個端點時,我試圖將我的種子數據顯示為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數據以使其像上面的代碼一樣。 任何幫助將不勝感激。

您可以使用減少

這里的主意是

  • op對象上,根據播放列表ID創建鍵。
  • 如果已有鍵,我們會將新值推送到“ favourites
  • 如果不是,我們用{id, playlist_name , favourites:[]}初始化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)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM