PostgreSQL函数实现:如何向JSON数组中添加新JSON对象
在PostgreSQL中向JSON对象的数组字段添加新JSON对象
要实现把新的JSON对象追加到已有JSON的success数组里,你可以利用PostgreSQL的JSON操作函数来完成。这里是修正并完善后的完整函数:
DROP FUNCTION IF EXISTS orgname.testfunction(); CREATE OR REPLACE FUNCTION orgname.testfunction() RETURNS json LANGUAGE plpgsql VOLATILE AS $RESPONSE$ DECLARE response json = '{"success":[{"aaa":"bbb"}]}'::json; -- 初始响应JSON newitem json = '{"ccc":"ddd"}'::json; -- 待添加的新JSON对象 BEGIN -- 提取原数组、拼接新元素、替换回原字段 response = json_set( response, '{success}', (response->'success') || json_build_array(newitem) ); RETURN response; END; $RESPONSE$;
关键步骤解释:
response->'success':从原JSON对象中提取出success对应的数组部分json_build_array(newitem):把单个JSON对象包装成只有一个元素的数组,这样才能和原数组进行拼接||:PostgreSQL的JSON数组拼接操作符,会把新数组的元素追加到原数组末尾json_set:将更新后的数组重新赋值回原JSON对象的success字段
测试验证
调用这个函数:
SELECT orgname.testfunction();
会得到你期望的结果:
{"success":[{"aaa":"bbb"},{"ccc":"ddd"}]}
额外提示
如果你的业务场景更频繁地进行JSON操作,推荐使用jsonb类型(PostgreSQL的二进制JSON格式),操作逻辑完全一致,只需要把json替换为jsonb,使用jsonb_set和jsonb_build_array即可,性能会更优。
内容的提问来源于stack exchange,提问作者Nadhas
相关产品推荐
相关产品推荐

