postgresql 函数 - 如何将新的 json 对象推送到 json 数组?

Posted

技术标签:

【中文标题】postgresql 函数 - 如何将新的 json 对象推送到 json 数组?【英文标题】:postgresql function - how to push new json object to json array? 【发布时间】:2018-04-23 11:02:03 【问题描述】:

我需要将新的 json 对象推送到现有的 json。

response json ='"success":["aaa":"bbb"]'::json;
newitem json ='"ccc":"ddd"'::json;

最终响应 json 应该如下所示

"success":["aaa":"bbb","ccc":"ddd"]

完整代码如下:

DROP FUNCTION orgname.testfunction();
CREATE OR REPLACE FUNCTION orgname.testfunction()
RETURNS json
    LANGUAGE 'plpgsql'
    VOLATILE
AS $RESPONSE$
DECLARE
    response json ='"success":[]'::json;
    newitem json ='"ccc":"ddd"'::json;  
BEGIN 
    with c(response,newitem) as (values('"success":["aaa":"bbb"]'::json,'"ccc":"ddd"'::json))
, m as (select json_array_elements(response->'success') from c union all select newitem from c)
select concat('"success":',json_agg(json_array_elements),'')::json from m;
    return '"expecting":"result"'::json;
END;
$RESPONSE$

【问题讨论】:

【参考方案1】:

9.4 的解决方案看起来不整洁。比如:

t=# with c(response,newitem) as (values('"success":["aaa":"bbb"]'::json,'"ccc":"ddd"'::json))
, m as (select json_array_elements(response->'success') from c union all select newitem from c)
select concat('"success":',json_agg(json_array_elements),'')::json from m;
                   concat
--------------------------------------------
 "success":["aaa":"bbb", "ccc":"ddd"]
(1 row)

更新

为你的功能:

t=# CREATE OR REPLACE FUNCTION orgname.testfunction()
RETURNS json
    LANGUAGE 'plpgsql'
    VOLATILE
AS $RESPONSE$
DECLARE
    response json ='"success":["aaa":"bbb"]'::json;
    newitem json ='"ccc":"ddd"'::json;
BEGIN
  return (with c(_response,_newitem) as (values(response,newitem))
, m as (select json_array_elements(_response->'success') from c union all select _newitem from c)
select concat('"success":',json_agg(json_array_elements),'')::json from m);
END;
$RESPONSE$
;
CREATE FUNCTION
t=# select * from orgname.testfunction();
                testfunction
--------------------------------------------
 "success":["aaa":"bbb", "ccc":"ddd"]
(1 row)

【讨论】:

ERROR: column reference "response" is ambiguous LINE 2: , m as (select json_array_elements(response->'success') from... @Udhaya 我为你重写了答案

以上是关于postgresql 函数 - 如何将新的 json 对象推送到 json 数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何将新的 Lambda 函数部署到现有 Rest Api 的 Stage?

如何将新的 JVM 附加到生成的 Python 进程?

如何将新的键:值对添加到已经存在的数组状态变量反应原生

将新的 GitHub 提交实时排队到 Google Pub/Sub

Nodejs Postgresql如何监视新的数据库记录插入

powershell 将新的提示链接添加到SharePoint列表。也是在powershell中使用带参数的函数的示例。