psql在字符串中插入带双引号的json

ruc*_*ckc 5 postgresql json psql jsonb

我正在尝试将exiftool生成的JSON通过psql有效插入到Postgresql中。似乎以某种方式使转义的单引号和转义的双引号无法正常工作。我不知道如何正确转义json。似乎psql在将\“引导到psql而不是查询时,没有正确处理单引号转义。

给定这张表

create table test (exif jsonb);
Run Code Online (Sandbox Code Playgroud)

这些工作:

test=> insert into test values ('{"a": 1, "b": "2"}');
INSERT 0 1
test=> insert into test values ('{"a": 1, "b": "2\""}');
INSERT 0 1
test=> select * from test;
     exif
----------------------
{"a": 1, "b": "2"}
{"a": 1, "b": "2\""}
Run Code Online (Sandbox Code Playgroud)

但是这些不

test=> insert into test values ('{"a": 1, "b": "1\' 2\""}');
Invalid command \""}');. Try \? for help.

test=> select '{"a": 1, "b": "1' 2\""}';
Invalid command \""}';. Try \? for help.

test=> select E'{"a": 1, "b": "1' 2\""}';
Invalid command \""}';. Try \? for help.

test=> select '{"a": 1, "b": "1\' 2\""}';
Invalid command \""}';. Try \? for help.
Run Code Online (Sandbox Code Playgroud)

有什么建议么?

Jor*_*pos 5

在数据库命令中转义单引号需要将其加倍:

test=> insert into test values ('{"a": 1, "b": "1'' 2\""}');
Run Code Online (Sandbox Code Playgroud)