【问题标题】:Insert json string with field names enclosed in single quotes into postgresql as a jsonb field将带有单引号的字段名称的json字符串作为jsonb字段插入postgresql
【发布时间】:2015-11-25 13:16:08
【问题描述】:

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

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,或者我应该将所有'转换为"

提前致谢!

格热戈茨

【问题讨论】:

  • {'name': 'Grzegorz', 'age': 123} 可以是有效的 javascript 值,但不是有效的 JSON。盲目地将所有' 转换为" 可能很危险,只要考虑 f.ex。 {'name': 'Gregor "Grzegorz"', 'age': 123}(如果这是一个可能的生成值,因为它也可以用 javascript 解析)。相反,我会研究这些值是如何生成的,并寻找一种方法来生成 valid JSON 值。

标签: postgresql jsonb


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多