从postgres json列中提取数组并映射它

时间:2014-06-09 15:35:53

标签: json postgresql postgresql-9.3

create table test(a json);

insert into test(a) 
values('{"orders":[{"orderId":1}, {"orderId":2, "status":"done"}, {"orderId":3}]}');

鉴于上面的结构,我可以得到一个未完成的数组或一组orderIds&#39 ;?那么,我的意思是我可以用sql或plpgsql获取orderIds吗?

任何建议都会很棒!非常感谢你!

1 个答案:

答案 0 :(得分:8)

一旦我修复了完全破坏的json,这只是一个LATERAL查询来解压缩数组并过滤它。

select (x->>'orderId')::integer
from test,
     json_array_elements(a->'orders') x 
where (x ->> 'status') IS DISTINCT FROM 'done';

我使用了IS DISTINCT FROM,因此我无需测试NULL(无密钥)和!= 'done'