我有一个Postgres函数,它有一个insert语句,其中一列必须转换为json并插入到表中。在这里,我想删除json对象的双引号。
请帮助如何实现它。
REPLACE(json_build_array(adm_id),'"', '')
上面的代码错误地说出了replace(json, text, text) doesn't exist
。我试图将其强制转换为文本并删除双引号,但当我将其转换回json时,它再次添加了双引号。
尝试使用trim
删除json文档周围的双引号:
jsonb_build_array(trim('"' FROM adm_id))
或者替换以从每个json元素中删除它们:
replace(jsonb_build_array(c)::text,'"','')
演示:
WITH j (c) AS (
VALUES ('"{id: 1, txt: "foo"}"'),('{id: 2}')
)
SELECT
jsonb_build_array(trim('"' FROM c)),
replace(jsonb_build_array(c)::text,'"','')
FROM j;
jsonb_build_array | replace
---------------------------+-------------------------
["{id: 1, txt: "foo"}"] | [{id: 1, txt: foo}]
["{id: 2}"] | [{id: 2}]
(2 rows)