我有一个长这样的json数据:
我想迭代它的元素并打印它们。我是这样做的:
但是这样只会出现语法错误:
尝试在不使用
{
"elements": [ "element1", "element2", "element3" ]
}
我想迭代它的元素并打印它们。我是这样做的:
do $$
declare
datajson jsonb := '{
"elements": [ "element1", "element2", "element3", "element4" ]
}';
element varchar(128);
begin
foreach element in array jsonb_array_elements(datajson->'elements')
loop
raise notice '%', element;
end loop;
end;
$$;
但是出现以下错误:查询select jsonb_array_elements(datajson->'elements')返回了多行
。
问题出在哪里呢?
更新
尝试了这个建议:
do $$
declare
datajson jsonb := '{
"elements": [ "element1", "element2", "element3", "element4" ]
}';
element varchar(128);
begin
foreach element in array
SELECT array_agg(jsonb_array_elements) FROM jsonb_array_elements(datajson->'elements')
loop
raise notice '%', element;
end loop;
end;
$$;
但是这样只会出现语法错误:
ERROR: 42601: syntax error at or near "SELECT"
LINE 7: SELECT array_agg(jsonb_array_elements) FROM jsonb_array_...
^
LOCATION: scanner_yyerror, scan.l:1134
尝试在不使用
FOR r IN (...)
和声明RECORD
变量的情况下完成此操作。
{ "name" : "value", "fields": ["a1", "a2"] }
,该怎么办? - lapotsFOR r IN (...)
来实现,但我希望避免声明一个RECORD
变量。 - user9645