Извлеките массив из столбца postgres json и сопоставьте его


create table test(a json);

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

Учитывая структуру выше, Могу ли я получить массив или набор orderIds, которые не "сделаны"? И под этим я подразумеваю, могу ли я получить orderIds от sql или plpgsql?

Любой совет был бы великолепен! Большое спасибо!

1 4

1 ответ:

Как только я исправил ваш полностью сломанный 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'.