问题描述
--设置服务器输出;
DECLARE
p_json CLOB := '
{
"value": [
{
"id": "AAMkADFjOTE3MDZmLTY3YWMtNDA0ZS05OWNmLWNmM","ccRecipients": [
{
"emailAddress": {
"name": "Sudip Dutta","address": "[email protected]"
}
},{
"emailAddress": {
"name": "D Roy","address": "[email protected]"
}
}
]
}
]
}'
;
l_cc_email_address VARCHAR2(2000);
l_cc_email_addresses VARCHAR2(4000);
l_message_id VARCHAR2(4000);
BEGIN
apex_json.parse(p_json);
FOR cc_email_counter IN 1..apex_json.get_count(p_path => 'value.ccRecipients') LOOP
l_cc_email_address := NULL;
l_cc_email_address := apex_json.get_varchar2(p_path =>
'value[%d].ccRecipients[%d].emailAddress.address',p0 => cc_email_counter
);
dbms_output.put_line('New Iteration l_cc_email_addresses :- ' || l_cc_email_address);
END LOOP;
END;
我正在尝试解析上面的 json 并想在循环中打印“地址”标签值。不能做同样的事情。上面的代码我试过了。请帮忙。
解决方法
"value" 是一个元素数组 [],其中包含一个元素 - 您需要在 apex_json.get_count
函数中选择第一个数组元素。
set serveroutput on size 999999
clear screen
DECLARE
l_json_text CLOB;
l_json_values apex_json.t_values;
BEGIN
l_json_text := '
{
"value": [
{
"id": "AAMkADFjOTE3MDZmLTY3YWMtNDA0ZS05OWNmLWNmM","ccRecipients": [
{
"emailAddress": {
"name": "Sudip Dutta","address": "[email protected]"
}
},{
"emailAddress": {
"name": "D Roy","address": "[email protected]"
}
}
]
}
]
}
';
apex_json.parse(
p_values => l_json_values,p_source => l_json_text
);
FOR r IN 1 .. APEX_JSON.get_count(p_path => 'value[1].ccRecipients',p_values => l_json_values) LOOP
DBMS_OUTPUT.put_line('email address: '||apex_json.get_varchar2(p_path => 'value[1].ccRecipients[%d].emailAddress.address',p0 => r,p_values => l_json_values));
END LOOP;
END;
/
email address: [email protected]
email address: [email protected]