查询Postgres获取JSON中的项目数

时间:2014-12-09 15:13:32

标签: json postgresql postgresql-9.3

我正在运行Postgres 9.3并且遇到一个涉及JSON列的查询问题,我似乎无法破解。

我们假设这是表格:

# CREATE TABLE aa (a int, b json);
# INSERT INTO aa VALUES (1, '{"f1":1,"f2":true}');
# INSERT INTO aa VALUES (2, '{"f1":2,"f2":false,"f3":"Hi I''m \"Dave\""}');
# INSERT INTO aa VALUES (3, '{"f1":3,"f2":true,"f3":"Hi I''m \"Popo\""}');

我现在想要创建一个查询,返回JSON列的根节点中正好有三个项/键的所有行(即第2行和第3行)。 JSON是否嵌套无所谓。

我尝试使用json_object_keysjson_each,但无法让它发挥作用。

1 个答案:

答案 0 :(得分:3)

json_each(json)应该做的工作。仅计算根元素:

SELECT aa.*
FROM   aa, json_each(aa.b) elem
GROUP  BY aa.a   -- possible, because it's the PK!
HAVING count(*) = 3;

SQL Fiddle.