[英]Exporting Postgres Rows as a JSON File
我需要为我网站上的 dataTables 部分生成一个 JSON 文件。 JSON 的格式应如下所示:
{
"data": [
[
"Tiger Nixon",
"System Architect",
"Edinburgh",
"5421",
"2011/04/25",
"$320,800",
],
[
"Garrett Winters",
"Accountant",
"Tokyo",
"8422",
"2011/07/25",
"$170,750"
],
]
}
这种格式看起来像是JSON 创建函数(表 9-42)中列出的数组数组。--array_to_json。
但是,我的数据没有以数组的形式存储在我的数据库中。 这是典型的行数据。
但是当我尝试使用“row_to_json”导出到 JSON 时——格式与我需要的相差甚远。 请参阅此 SQLfiddle 示例。
基本上,我试图找出使 JSON 导出看起来更像上面粘贴的格式的最佳方法。
我应该先将行重新格式化为数组,然后将它们存储在新表中,所以当我使用“row_to_json”时,它们会作为数组出现? 或者,还有更好的方法?
选择行作为数组并使用json_agg(array_to_json(...))
:
select
json_build_object(
'data',
json_agg(array_to_json(array[price::text, qty::text])))
from data;
json_build_object
----------------------------------------------------
{"data" : [["11","11"], ["22","11"], ["33","11"]]}
(1 row)
你需要在Postgres 9.4中引入一个函数,所以SqlFiddle是没用的。
$ psql -U my_user -h my_host -c "SELECT * FROM my_table" --csv my_db | spyql -Oindent=4 "SELECT list_agg(_values) AS data FROM csv TO json"
{
"data": [
[
"1",
"David",
"5.1"
],
[
"2",
"James",
"2.1"
],
[
"3",
"Joana",
""
],
[
"4",
"Hellen",
"9.8"
]
]
}
我们使用 psql 将查询/表导出为 CSV,然后使用 spyql 将 CSV 转换为 json。 _values
中的_values
变量包含一个列表,其中包含自动类型转换之前每列的值,因此所有值都是字符串。 如果您更喜欢使用强制转换的值,则可以改用cols
变量。 list_agg
将所有行聚合到一个数组中。 如果使用cols
而不是_values
,您会得到以下_values
(还要注意 NULL 值的处理):
$ psql -U my_user -h my_host -c "SELECT * FROM my_table" --csv my_db | spyql -Oindent=4 "SELECT list_agg(cols) AS data FROM csv TO json"
{
"data": [
[
1,
"David",
5.1
],
[
2,
"James",
2.1
],
[
3,
"Joana",
null
],
[
4,
"Hellen",
9.8
]
]
}
作为记录,我使用以下 SQL 命令创建了示例表:
CREATE TABLE my_table AS
SELECT *
FROM (VALUES (1, 'David', 5.1), (2, 'James', 2.1), (3, 'Joana', NULL), (4, 'Hellen', 9.8))
AS t(id, name, score);
免责声明:我是 spyql 的作者
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.