2014-09-12 92 views
0

我需要以某種方式從json轉換爲int。我做了這個函數:從json投射到int不工作?

CREATE OR REPLACE FUNCTION json2int(p_json json) 
    RETURNS integer AS 
$BODY$DECLARE 
    v_json json; 
    --v_char character varying; 
    v_int integer; 
BEGIN 
    SELECT p_json->'additionalData'->'id' INTO v_json; 
    --SELECT CAST(v_json as character varying) INTO v_char; 
    SELECT CAST(v_json as integer) INTO v_int; 
    RETURN v_int; 
END;$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 
ALTER FUNCTION json2int(json) 
    OWNER TO postgres; 

我試着從json轉換爲int,這沒有奏效。然後我試着從json投射到int變化的字符,那也沒用。於是我說:

CREATE CAST (json AS integer) WITH INOUT as implicit; 

,現在當我跑我的功能:

SELECT json2int('{"additionalData":{"id":"4","userType":"viewer"},"type":"wall"}'); 

我得到這個錯誤:

ERROR: invalid input syntax for integer: ""4"" 
CONTEXT: SQL statement "SELECT CAST(v_json as integer)" 
PL/pgSQL function json2int(json) line 8 at SQL statement 

有人可以有幫助呢?

+2

有2個功能從JSON獲得價值:' - >'和' - >>'。一個返回JSON,另一個返回文本。你需要那個返回文本的文件。 – 2014-09-12 14:15:24

+0

詳情在這裏:http://www.postgresql.org/docs/current/static/functions-json.html – 2014-09-12 14:16:31

回答

2

由於暗示在評論中使用->>有文本,然後強制轉換爲int:

SELECT (p_json -> 'additionalData' ->> 'id')::int INTO v_int;