我有一个简单的PostgreSQL函数,我想将复杂的JSON传递给:
CREATE OR REPLACE FUNCTION foo(sync_data json)
RETURNS json AS
$body$
DECLARE
...
END;
$body$ LANGUAGE plpgsql;
用这样的方式调用它:
SELECT foo('{“deviceId”:1,“shops”:[{“id”:1},{“id”:2}]}':: json);
给了我以下错误:
我需要传递复杂的JSON作为参数,包含对象数组。
谢谢!
PS:这是完整的功能文本:
CREATE OR REPLACE FUNCTION foo(sync_data json)
RETURNS json AS
$body$
DECLARE
res_json json;
device_id integer;
shops json ARRAY;
BEGIN
SELECT json_extract_path(sync_data, 'deviceId') INTO device_id;
SELECT json_array_elements(json_extract_path(sync_data, 'shops')) INTO shops;
SELECT json_build_object('devId', device_id) INTO res_json;
RETURN res_json;
END;
$body$ LANGUAGE plpgsql;
答案 0 :(得分:0)
问题在于函数内部的语法。 解析对象数组并将其分配给json ARRAY的正确语法:
CREATE OR REPLACE FUNCTION foo(sync_data json)
RETURNS json AS
$body$
DECLARE
res_json json;
device_id integer;
shops json ARRAY;
BEGIN
SELECT json_extract_path(sync_data, 'deviceId') INTO device_id;
shops := ARRAY(SELECT json_array_elements(sync_data->'shops'));
SELECT json_build_object('Dev_id', device_id, 'shop1', shops[1], 'shop2', shops[2]) INTO res_json;
RETURN res_json;
END;
$body$ LANGUAGE plpgsql;