2016-02-28 103 views
1

我試圖將exiftool生成的JSON通過psql插入postgresql,這似乎有效。看起來不知何故,逃脫的單引號和逃脫的雙引號不能正常工作。我無法弄清楚如何正確地逃避json。看來,在psql不處理單引號逃逸正確作爲其啓動的\」走出去psql的,而不是查詢psql在字符串內插入帶雙引號的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規範說他們應該逃脫。 – ruckc

+0

感謝@ruckc的跟進 –

3

這是如何做到逃脫正常的單引號:

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