繁体   English   中英

如何在 PostgreSQL V9.4 的新 json-array 元素中添加和删除

[英]How to ADD and REMOVE in a new json-array element in PostgreSQL V9.4

我正在创建一个循环来创建一个新的 json 矩阵,其中只有某些元素,为此我需要通过先前创建的 json-array 和 PUSH(添加元素)和 POP(删除元素)元素来 go 条件。

我收到类似的东西

[
{"id":1 , "data": "test_a"},
{"id":2 , "data": "test_t"},
{"id":3 , "data": "test_h"},
.....
]

我正在对循环做这样的事情

DECLARE
_test       json;
i           json;
_new_jsn    json;
BEGIN
_test := SELECT json_agg(json_build_object('id', 1, 'data', 'test'))

        FOR i IN SELECT * FROM json_array_elements(_test) LOOP


            RAISE NOTICE 'element %',i;
        END LOOP;

从这里开始,我不知道如何继续在新参数中添加和删除元素。

我的过滤器基于 IF-ELSE 所以如果我有

       FOR i IN SELECT * FROM json_array_elements(_test) LOOP
         IF i->>id > 2 THEN
         ..... Add the element in _new_jsn
         ELSE
         .... Remove/Ignore the element
         END IF; 
        END LOOP;

我想在循环后收到这样的东西

[
{"id":3 , "data": "test_h"},
{"id":4 , "data": "test_c"},
.....
]

我相信你正在寻找

DECLARE
  test CONSTANT json := json_build_array(
   json_build_object('id', 1, 'data', 'test_a'),
   json_build_object('id', 2, 'data', 'test_t'),
   json_build_object('id', 3, 'data', 'test_h'),
   json_build_object('id', 4, 'data', 'test_c')
  );
  result json;
BEGIN
  result := (SELECT json_agg(el)
    FROM json_array_elements(test) AS t(el)
    WHERE (el->>'id')::int > 2);
  -- …
END;

您在这里不需要任何循环或IF语句。 只是一个带有WHERE子句的SELECT查询。

在线演示(我没有找到比引发异常更好的打印结果的方法:-/)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM