使用APEX_JSON.get_varchar2无法提取SOAP API返回JSON值的解决方法
解决PL/SQL中APEX_JSON提取带命名空间冒号的JSON键值问题
你的问题出在JSON键包含冒号(如SOAP-ENV:Body),APEX_JSON默认的点分隔路径语法无法正确识别这类带特殊字符的键,导致取值失败。以下是两种可行的解决方法:
方法1:用双引号包裹带特殊字符的键
将路径中包含冒号的键用双引号包裹,同时用单引号包裹整个路径字符串(避免PL/SQL的字符串转义问题):
APEX_JSON.parse(RESP); P_TRACK_NO := APEX_JSON.get_varchar2('"SOAP-ENV:Body".ProcessShipmentReply.RequiredDetail.MasterTrackingId.TrackingNumber');
方法2:使用路径数组参数
APEX_JSON的get_varchar2支持传入字符串数组作为路径,每个元素对应一个JSON键,这种方式不需要处理特殊字符的转义:
APEX_JSON.parse(RESP); P_TRACK_NO := APEX_JSON.get_varchar2( path => apex_t_varchar2( 'SOAP-ENV:Body', 'ProcessShipmentReply', 'RequiredDetail', 'MasterTrackingId', 'TrackingNumber' ) );
原理说明
当JSON键包含冒号、空格等特殊字符时,APEX_JSON的点分隔路径会将这些字符视为路径分隔的一部分,无法匹配到目标键。通过双引号包裹特殊键名,或者拆分路径为数组,就能让APEX_JSON精准定位到对应的JSON节点,成功提取TrackingNumber的值(示例中为456413421)。
内容的提问来源于stack exchange,提问作者JAWAD KHAN
相关产品推荐
相关产品推荐

