[英]Parse JSON array in PL/SQL
PL / SQL新手在这里。
我将Oracle APEX用作REST服务器,并且正在从应用程序向REST服务器发送JSON数组( items
)。 JSON包含日志,其中可能有100s。 我可以一次成功地发送它们,但是效率不高,所以我希望能够发送包含日志的JSON数组。
这是一些测试JSON:
{
"items": [{
"source": "00000999",
"message": "test1"
}, {
"source": "00000999",
"message": "test2"
}, {
"source": "00000999",
"message": "test3"
}, {
"source": "00000999",
"message": "test4"
}]
}
一旦我可以解析该JSON数组,就将它们作为单独的行添加到数据库中。
这是我目前所拥有的:
set serveroutput on;
declare
items varchar2(2000):= '{"items":[{"source": "00000999","message": "test1"}, {"source": "00000999","message": "test2"}, {"source": "00000999","message": "test3"}, {"source": "00000999","message": "test4"}]}';
v_source varchar2(100);
v_message varchar2(2000);
v_json_list json_list;
v_json_list2 json_list;
begin
v_json_list := json_list(items);
v_json_list2 := json_ext.get_string(json(v_json_list.GET(0)),'items');
for i in 1..v_json_list2.count
loop
begin
v_source := json_ext.get_string(json(v_json_list2.GET(i)),'source');
v_message := json_ext.get_string(json(v_json_list2.GET(i)),'message');
ca_log_pak.log_info(v_source, v_message);
end;
end loop;
commit;
dbms_output.put_line('Y');
exception
when others then
dbms_output.put_line(SQLERRM);
end;
这引发了一个错误,表示v_json_list := json_list(items);
上的expression is of the wrong type
v_json_list := json_list(items);
有人可以告诉我如何正确解析items
数组吗?
谢谢
我认为您的JSON字符串应如下所示:
[{"source": "00000999","message": "test1"}, {"source": "00000999","message": "test2"}, {"source": "00000999","message": "test3"}, {"source": "00000999","message": "test4"}]
尝试这个:
DECLARE
items VARCHAR2(2000):= '{"items":[{"source": "00000999","message": "test1"}, {"source": "00000999","message": "test2"}, {"source": "00000999","message": "test3"}, {"source": "00000999","message": "test4"}]}';
my_json json_list := json_list(LTRIM(RTRIM(items,'}'), '{"items":'));
listElement json_value;
jsonObj json;
BEGIN
FOR i IN 1..my_json.count
LOOP
listElement := my_json.get(i);
jsonObj := json(listElement);
dbms_output.put_line(jsonObj.json_data(1).mapname);
dbms_output.put_line(jsonObj.json_data(1).str);
END LOOP;
END;
您是否尝试通过在5.0中使用apex_json包来将数据转换为adhoc xmltable并使用INSERT INTO SELECT概念插入到永久表中? 您可以在下面看到apexjson和xml表的示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.