值如下:
{"111": false, "222": false, "333": false}
如何在不指定键的情况下将其更新为以下内容?
{"111": true, "222": true, "333": true}
答案 0 :(得分:0)
只需在字符串上使用REPLACE
:
REPLACE(source, 'false', 'true')::jsonb;
其中source
是您的jsonb
列。
答案 1 :(得分:0)
您可以首先使用json_each()
分解JSON,为每行提供一个键和值对。使用CASE
将false
替换为true
。然后使用字符串串联和string_agg()
组成JSON,并将其转换回json
。
UPDATE json
SET json = (SELECT ('{'
|| string_agg('"'
|| key
|| '": '
|| CASE
WHEN value::text = 'false' THEN
'true'
ELSE
value::text
END,
', ')
|| '}')::json
FROM json_each(json));
或者如果类型实际上是jsonb
而不是jsonb
,则使用json
变体。