【问题标题】:Format Data from SQL Query as JSON将 SQL 查询中的数据格式化为 JSON
【发布时间】:2019-10-31 08:50:07
【问题描述】:

我有一个表格的数据库表

CREATE TABLE products(
 id SERIAL PRIMARY KEY,
 category TEXT,
 name TEXT,
 price REAL,
 weight REAL);

我想以格式为我的 API 输出 JSON

[{"category":"category name", 
"products":[{"name":"product name one","price":4.44,"weight":0.5}, 
{"name":"product name two","price":6.45,"weight":1.0}]}]

所以如果我的表有以下条目:

INSERT INTO products (category, name, price, weight) 
VALUES ("toothpaste","Chrest Pro-White",4.99,6.4),
("toothpaste","Colgate Cavity Prevention",3.99,6.4), 
("body wash","Old Spice Hydro",5.99,16.0), 
("body wash","Axe Apollo",8.99,22.0);

API 应该返回

[{"category":"toothpaste", 
"products":[{"name":"Chrest Pro-White","price":4.99,"weight":6.4}, 
{"name":"Colgate Cavity Prevention","price":3.99,"weight":6.4}]},
{"category":"body wash", 
"products":[{"name":"Old Spice Hydro","price":5.99,"weight":16.0}, 
{"name":"Axe Apollo","price":8.99,"weight":22.0}]}]

我可以遍历表中的所有行并为每个唯一的类别名称手动创建 json 对象,但我希望有更好的方法来做到这一点。

【问题讨论】:

  • 你是如何查询你的数据库的?大多数用于 Node 的数据库库和 ORM 都内置了 JSON 格式化程序

标签: node.js json postgresql


【解决方案1】:

你可以用这个 console.log(JSON.stringify(data));

【讨论】:

    【解决方案2】:

    有很多方法可以通过使用 ORM 并从 API 服务器创建 json,但您也可以直接在 postgres 中执行此操作:

    select json_agg(categories) 
    FROM (
      SELECT json_build_object(
             'category', category,
             'products', json_agg(
                            json_build_object(
                               'name', name, 
                               'price', price, 
                               'weight', weight)
                            )
           ) as categories
    FROM products
    GROUP BY category) sub;
    [{"category" : "toothpaste", "products" : [{"name" : "Chrest Pro-White", "price" : 4.99, "weight" : 6.4}, {"name" : "Colgate Cavity Prevention", "price" : 3.99, "weight" : 6.4}]}, {"category" : "body wash", "products" : [{"name" : "Old Spi
    ce Hydro", "price" : 5.99, "weight" : 16}, {"name" : "Axe Apollo", "price" : 8.99, "weight" : 22}]}]
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      相关资源
      最近更新 更多