arrays - 从没有列名的 Postgres 行构建 JSON

标签 arrays json postgresql postgresql-9.3

我有一个 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)

问题:

  1. 首先,

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}等

  1. 另外,

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/

相关文章:

javascript - 如何按顺序合并两个数组?

php - 显示数据库中具有相同 ID 的条目

c - 数组/指针 (C)

使用远程 API 创建 docker 容器的 Python 脚本

postgresql - postgres 错误 InitializeSessionUserId - 找不到角色 "root"

sql - postgreSQL 斐波那契数列 - 查询没有结果数据的目的地

c++ - 从单独的文本文件中获取数组值

json - 带有JSON参数的Grails域构造函数不起作用

Javascript - JSON - 嵌套和分组

Ruby-on-rails Postgres 查询