You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:25:29