从没有列名的Postgres行构建JSON

时间:2015-11-05 11:48:53

标签: arrays json postgresql postgresql-9.3

我有一个3 colum 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. 首先,
  2.   

    SELECT JSON_BUILD_OBJECT(k,v)FROM tbl

    给我个人json元素{" k1":3},{" k6":5}等。 我可以在我的应用程序(在Go中)构建完整的json数组,但它很糟糕。 如何获得完整[{" 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. 此外,
    2.   

      SELECT JSON_BUILD_OBJECT(k,v)FROM tbl WHERE t = x;

      错误,所以我无法过滤t。我不想要GROUP BY,我想分别在3个不同的传递上生成3个不同的json数组,具体取决于WHERE t =的值。 IOW,我不想要[{&#34; y&#34;:[{&#34; k11&#34;:3},{&#34; k4&#34;:2}]等等< / p>

      我是Postgres 9.4中json ops的新手,我想在数据库中正确完成json,而不是在它之外搞乱字符串操作。我在这里俯瞰什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

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