[英]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.