2016-02-28 3 views
1

Я пытаюсь вставить exiftool сгенерированный JSON в postgresql через psql, который выглядит действительным. Как-то кажется, что сбежавшая одинарная кавычка и скрытая двойная кавычка не работают должным образом. Я не могу понять, как правильно избежать json. Оказывается, что PSQL не обрабатывает единой цитаты бежать правильно, как его загрузки \»из к PSQL вместо запросаpsql insert json с двойными кавычками внутри строк

Учитывая эту таблицу

create table test (exif jsonb); 

Эти работы:.

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\""} 

Но они не

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. 

Любые предложения?

ответ

1

В команде базы данных, чтобы избежать апостроф вам нужно удвоить:

test=> insert into test values ('{"a": 1, "b": "1'' 2\""}'); 
+0

двойные кавычки экранируются в источнике , и json spec говорит, что их следует избегать. – ruckc

+0

Спасибо за продолжение @ruckc –

3

Это как сделать избежать одинарные кавычки правильно:

test=> select '{"a": 1, "b": "1'' 2\""}';