我有一个 3 列的 PostgreSQL 9.4.4 tbl,其中 k:TEXT、UNIQUE、v:INT、t:TEXT。
k v t
----------------
k1 3 x
k6 5 x
k11 3 y
k3 2 z
k4 2 y
k7 1 x
.. . .
我正在尝试分别自动生成 3 个 JSON 数组:
1. [{"k1":3},{"k6":5},{"k7":1}] (WHERE t=x)
2. [{"k11":3},{"k4":2}] (WHERE t=y)
3. [{"k3":2}] (WHERE t=z)
问题:
- 首先,
SELECT JSON_BUILD_OBJECT(k,v) FROM tbl
给我单独的 json 元素 {"k1":3}、{"k6":5} 等。 我可以在我的应用程序中构建完整的 json 数组(在 Go 中),但它很笨拙。 如何获得完整的 [{"k1":3},{"k6":5},{"k7":1}]?
SELECT array_to_json(array_agg(row_to_json(tx))) FROM (SELECT k,v FROM tbl ) tx;
给我列名,这是我不想要的: [{"k":"k1","v":3},{"k":"k6","v":5} 等。我需要 [{"k1":3},{"k6": 5}等
- 另外,
SELECT JSON_BUILD_OBJECT(k,v) FROM tbl WHERE t=x;
错误,所以我无法过滤 t。我不想要 GROUP BY,我想分别生成 3 个不同的 json 数组,在 3 个不同的传递上,具体取决于 WHERE t= 的值。 IOW,我不想要 [{"y":[{"k11":3},{"k4":2}], 等等
我是 Postgres 9.4 中 json ops 的新手,我想在数据库中正确完成 json,而不是在它之外进行字符串操作。我在这里忽略了什么?任何帮助将不胜感激。
最佳答案
with s (k,v,t) as ( values
('k1',3,'x'),
('k6',5,'x'),
('k11',3,'y'),
('k3',2,'z'),
('k4',2,'y'),
('k7',1,'x')
)
select t, array_to_json(array_agg(json_build_object(k,v)))
from s
where t = 'y'
group by t
关于arrays - 从没有列名的 Postgres 行构建 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543793/