Я хочу добавить новый столбец с именем «MyJsonObject» в таблицу «Тест». Новый столбец должен содержать значения только в том случае, если они истинны, а не NULL или 'null' в виде текста.
NULL как значение можно отфильтровать с помощью json_strip_nulls
, но как я могу отфильтровать другие значения, false и 'null' как текст?
json_strip_null
работает только для значений NULL
myjsonstring |
-----------------------------------------------------------------------|
{"column_1":false,"column_2":false,"column_3":true,"column_4":"red"} |
{"column_1":false,"column_2":false,"column_3":true,"column_4":"yellow"}|
{"column_1":false,"column_2":true,"column_3":true} |
{"column_1":true,"column_2":false,"column_3":true,"column_4":"NULL"} |
Я хочу получить:
myjsonstring |
-----------------------------------------------------------------------|
{"column_3":true,"column_4":"red"} |
{"column_3":true,"column_4":"yellow"}|
{"column_2":true,"column_3":true} |
{"column_1":true,"column_3":true |
1 ответ
Вам нужно разложить элементы, а затем агрегировать их обратно:
select t.myjsonstring, x.new_json
from the_table t
cross join lateral (
select jsonb_object_agg(k,v) as new_json
from jsonb_each(t.myjsonstring) as j(k,v)
where v is not null
and v::text not in ('false', 'NULL')
) as x
Похожие вопросы
Новые вопросы
json
JSON (нотация объектов JavaScript) — это сериализуемый формат обмена данными, который может быть прочитан машиной и человеком. Не используйте этот тег для собственных объектов JavaScript или литералов объектов JavaScript. Прежде чем задать вопрос, подтвердите свой JSON с помощью валидатора JSON, такого как JSONLint (https://jsonlint.com).