将字段名称用单引号括起来的 json 字符串作为 jsonb 字段插入 postgresql

Insert json string with field names enclosed in single quotes into postgresql as a jsonb field

我有代表 json 的字符串,其中字段名称和值用单引号引起来,例如 {'name': 'Grzegorz', 'age': 123}。假设我在 postgres 数据库中也有一个 table:

CREATE TABLE item (
     metadata jsonb
);

我正在尝试使用 JOOQ 插入行。 JOOQ 生成以下语句: insert into Item values('{''name'': ''Grzegorz'', ''age'': 123}'::jsonb); 但抛出错误:

ERROR:  invalid input syntax for type json
LINE 1: insert into Item values('{''name'': ''Grzegorz'', ''age'': 1...
Token "'" is invalid.
JSON data, line 1: {'...

是否有可能插入 json 并将名称用单引号 ' 括起来而不是双引号 " 或者我应该将所有 ' 转换为 "?

提前致谢!

格热戈日

Json syntax 需要双引号,所以这不是 Postgres 的问题。服务器只接受有效的 json 值。

您可以使用 replace():

insert into item 
values(replace('{''name'': ''Grzegorz'', ''age'': 123}', '''', '"')::jsonb);

select * from item;

             metadata             
----------------------------------
 {"age": 123, "name": "Grzegorz"}
(1 row)