如何将查询结果转换为Postgres内的JSON对象

时间:2015-06-04 18:16:07

标签: json postgresql

我有一个简单的查询,SELECT name, grp FROM things;会产生下表:

 name | grp 
------+-----
 a    | y
 b    | x
 c    | x
 d    | z
 e    | z
 f    | z

我想最终得到以下单个JSON对象:

 {y: [a], x: [b,c], z: [d,e,f]}

我觉得我更接近查询SELECT grp, array_agg(name) as names FROM things GROUP BY grp;,它给出了三行,其中“name”被压缩成一个数组,但我不知道从哪里开始将这些行压缩成一个数组单个JSON对象。

SELECT json_build_object(grp, array_agg(name)) as objects FROM things GROUP BY grp;可能稍微靠近,因为这会导致单个JSON对象(如{y: [a]})的单列结果,但它们仍然是单个对象,因此可能不是正确的路径。

这是使用Postgresql 9.4。

1 个答案:

答案 0 :(得分:6)

这里的关键似乎是json_object_agg函数,它没有与其余的json函数一起列出。

请参阅:http://www.postgresql.org/docs/9.4/static/functions-aggregate.html

以下查询确切地说明了我正在寻找的内容:

zfpath.getFileSystem().provider().checkAccess(zfpath, AccessMode.READ);
if (!Files.isWritable(zfpath))
    this.readOnly = true;