javascript - 格式化从 PostgreSql 数据库检索的 JSON 数据

标签 javascript node.js express knex.js

当用户访问某个端点时,我尝试将种子数据显示为 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 数据以使其像顶部的代码一样。任何帮助将不胜感激。

最佳答案

您可以使用reduce

这里的想法是

  • op 对象上根据播放列表 ID 创建键。
  • 如果已经有一个键,我们会将新值推送到收藏夹
  • 如果不是,我们用 {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))

关于javascript - 格式化从 PostgreSql 数据库检索的 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320526/

相关文章:

javascript - 在 Mac Lion 上构建 V8 时出错

javascript - 从 D3.js v3 迁移到 D3.js v4 不起作用 - 一个选择问题?

javascript - React + Firebase 保存问题。为什么这个哈希?

node.js - Facebook Page Tab 应用中的 Node Passport-facebook 登录

node.js - 使用模式数据库时,sails.js 如何处理数据库迁移?

node.js - mustache 模板仅将输入的第一个单词发送到服务器

javascript - 在每个页面中单独显示每个 div 内容

html - 如何覆盖生成的元标记?

javascript - 将 Create-React-App 与 ExpressJs 结合使用

javascript - 如何从 Express 中间件函数传递值?