PL/SQL中如何获取REST接口返回的嵌套JSON字段值?
解决PL/SQL解析嵌套JSON获取字段值的问题
问题原因
当前代码存在三个核心错误:
- 路径错误:响应JSON中的
Addresses字段并非直接在根对象下,而是嵌套在ven对象内部 - 结构误解:
Addresses是JSON数组(用[]包裹),不能直接用get_Object获取,需要先处理数组结构 - 类型不匹配:
vAddId是数字类型,使用get_string会导致类型转换错误,应该用get_number
修正后的解析代码
替换原解析部分的代码为:
l_object_address := json_object_t.parse(v_address_response); if l_object_address.get_Object('APIResponse').get_string('Status') = 'SUCCESS' then -- 1. 获取ven对象 declare l_ven_obj json_object_t := l_object_address.get_object('ven'); -- 2. 获取Addresses数组 l_addresses_arr json_array_t := l_ven_obj.get_json_array('Addresses'); -- 3. 取数组第一个地址对象(如果数组非空) l_addr_obj json_object_t; l_vadd_id number; -- 4. 获取TaxReg里的RegId示例 l_taxreg_arr json_array_t; l_taxreg_obj json_object_t; l_reg_id number; begin if l_addresses_arr is not null and l_addresses_arr.get_size() > 0 then l_addr_obj := json_object_t(l_addresses_arr.get(0)); -- 获取vAddId l_vadd_id := l_addr_obj.get_number('vAddId'); DBMS_OUTPUT.PUT_LINE('New Address ID : ' || l_vadd_id); -- 获取TaxReg中的RegId示例 l_taxreg_arr := l_addr_obj.get_json_array('TaxReg'); if l_taxreg_arr is not null and l_taxreg_arr.get_size() > 0 then l_taxreg_obj := json_object_t(l_taxreg_arr.get(0)); l_reg_id := l_taxreg_obj.get_number('RegId'); DBMS_OUTPUT.PUT_LINE('Reg ID : ' || l_reg_id); end if; else DBMS_OUTPUT.PUT_LINE('No addresses found in response'); end; else DBMS_OUTPUT.PUT_LINE('Error in creating address'); end if; -- 移除静默异常捕获,方便调试 exception when others then DBMS_OUTPUT.PUT_LINE('解析错误:' || SQLERRM); end;
关键说明
- 数组处理:JSON数组必须用
json_array_t类型接收,通过get_size()判断是否有元素,用get(index)获取指定位置的元素(索引从0开始) - 类型匹配:根据JSON字段的实际类型选择对应方法:数字用
get_number,字符串用get_string,布尔值用get_boolean - 调试建议:不要用
when others then null静默捕获异常,否则遇到错误无法定位问题
内容的提问来源于stack exchange,提问作者SKG
相关产品推荐
相关产品推荐

