/ /列名のないPostgresの行からJSONを構築する - 配列、json、postgresql、postgresql-9.3

列名のないPostgresの行からJSONを構築する - 配列、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配列を構築することができますが、それはハッキーです。 [{"" k1 ":3}、{" k6 ":5}、{" k7 ":1}"をどのようにして入手できますか?

SELECT array_to_json(array_agg(row_to_json(tx)))FROM(SELECT k、v FROM tbl)tx;

私が望んでいない列名を私に与えます: [{"" k1 ":3}、{" k ":" k6 "、" v ":5} 5}など

  1. また、

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

エラーが発生するので、私はtをフィルタリングできません。 私はGROUP BYを必要としません、3つの異なったパスで3つの異なるjson配列を別々に生成したいのですが、WHERE t =の値に応じてIOW、{{"y":[{"k11" :3}、{"k4":2}など

私はPostgres 9でjsonの操作に新しいです。4、私はDBの中で適切に行われているjsonをDBの外で操作するのが好きですが、ここで見落としているのは何ですか?

回答:

回答№1は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