2015-12-29 62 views
3

我試圖操縱與內部的單引號一個JSON和我有一些麻煩:單引號

1.-當我有一個功能,我不能傳遞作爲參數JSON字符串用單引號內: 這是函數:

CREATE OR REPLACE FUNCTION public.give_me_text 
(
    IN text json 
) 
RETURNS JSON AS 
$$ 
DECLARE 
v_text varchar; 
begin 

RAISE NOTICE 'text: %', text; 
v_text:=text || '- hello'; 
return v_text; 
end 
$$ 
LANGUAGE 'plpgsql'; 

通過調用類似這樣的工作:

SELECT * FROM give_me_text 
(
'{"es":"name 1","en":"name 2","de":"name 3","fr":"name 4","pt":"name 5"}' 
); 

但是,當我有一個單引號不工作:

SELECT * FROM give_me_text 
    (
    '{"es":"nam'e 1","en":"name 2","de":"name 3","fr":"name 4","pt":"name 5"}' 
    ); 

2:當我tryhing插入裏面單引號JSON值,這是給我同樣的錯誤: 這是工作:

INSERT INTO public.my_columns VALUES ('{ "name": "Book the First", "author": { "first_name": "Bob", "last_name": "White" } }'); 

但是這是不工作:

INSERT INTO public.my_columns VALUES ('{ "name": "Book's the First", "author": { "first_name": "Bob", "last_name": "White" } }'); 

任何想法如何逃避這個單引號?謝謝

+1

只是使它成爲一個雙單引號'「」' –

+0

我嘗試過REPLACE,但總是給我一個錯誤。我必須把它放在代碼中,因爲這個字符串來自數據庫,有時候會帶單引號,有時候不會。 – Za7pi

回答

2

在SQL中,單引號必須在字符串中轉義。這不是一個有效的字符串:

'{"es":"nam'e 1"}' 

因爲字符串"nam後結束。您可以通過重複它逃脫單引號:

'{"es":"nam''e 1"}' 

如果你正在做dynamic SQL,你可以傳遞參數給execute

execute 'insert into YourTable (col1) values ($1);' using json_var; 
+0

我只在SQL中工作。 – Za7pi

+0

但是你的字符串不是有效的SQL。它必須來自某個地方? – Andomar

+0

是的,它是一個有效的json字符串。它來自json場。我循環遊標的所有記錄,然後我做一個SELECT dinamycally,我連接這個值,然後我沒有有效的字符串 – Za7pi