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

如何使用Oracle APEX_JSON从OData响应JSON中获取odata.nextLink

如何用APEX_JSON获取包含点的键值(如odata.nextLink)

嘿,我刚好碰到过一模一样的问题!当JSON键名里带点这种特殊字符时,APEX_JSON的常规点语法确实会失效——因为它默认会把点当成层级分隔符来解析,以为你要找的是odata对象下的nextLink属性,而不是键名本身就是odata.nextLink的字段。

不过别担心,有两种简单的方法可以搞定这个问题:

方法1:使用带引号的路径表达式

直接把完整的键名用引号包起来,再用Oracle的q语法避免转义麻烦:

DECLARE
  l_json_response VARCHAR2(32767) := '{"odata.nextLink": "https://example.com/odata/nextpage"}';
  l_next_link     VARCHAR2(4000);
BEGIN
  -- 先解析JSON响应
  apex_json.parse(p_source => l_json_response);
  
  -- 用带引号的路径获取目标值
  l_next_link := apex_json.get_varchar2(q'('odata.nextLink')');
  
  DBMS_OUTPUT.PUT_LINE('获取到的下一页链接:' || l_next_link);
END;
/

这里的q'()'是Oracle的引用操作符,能让我们直接写带单引号的字符串,不用手动转义,APEX_JSON会把整个'odata.nextLink'当作单个键名来匹配。

方法2:使用数组形式传递键名

另一种方式是把键名作为数组的单个元素传入get_varchar2,这样APEX_JSON不会解析键名里的点:

DECLARE
  l_json_response VARCHAR2(32767) := '{"odata.nextLink": "https://example.com/odata/nextpage"}';
  l_next_link     VARCHAR2(4000);
BEGIN
  apex_json.parse(p_source => l_json_response);
  
  -- 用数组指定完整键名
  l_next_link := apex_json.get_varchar2(p_path => apex_t_varchar2('odata.nextLink'));
  
  DBMS_OUTPUT.PUT_LINE('获取到的下一页链接:' || l_next_link);
END;
/

这种方法更直观,直接告诉APEX_JSON我们要找的键就是odata.nextLink,不需要拆分层级。

额外说明

如果你的JSON结构其实是{"odata": {"nextLink": "xxx"}}(也就是odata是父对象,nextLink是子属性),那常规的apex_json.get_varchar2('odata.nextLink')是有效的。但根据你的描述,显然是键名本身包含点,所以上面两种方法就完全适用啦。

内容的提问来源于stack exchange,提问作者BSharp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:03:27