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

Oracle 12.1版本中如何解析JSON键值对并输出为键、值两列

解决方案

问题原因

你原有的SQL将JSON对象误作为数组处理,通过$[0]、$[1]取数组索引下标的值,而你输入的是标准JSON对象,自然无法得到预期结果。

适配Oracle 12.1的正确实现

Oracle 12.1原生支持JSON_TABLE的WITH KEY子句,不需要使用JSON_OBJECT_T函数,就可以直接获取JSON属性的键名,实现键值列拆分,正确代码如下:

WITH json_data AS (
  SELECT '{
    "ABC": "123",
    "DEF": "456",
    "GHI": "789"
  }' doc FROM dual
)
SELECT jt.key_str, jt.val_str
FROM json_data,
     JSON_TABLE(
       json_data.doc,
       '$.*'
       COLUMNS (
         key_str VARCHAR2(255) PATH '$' WITH KEY,
         val_str VARCHAR2(255) PATH '$'
       )
     ) jt;

代码说明

  • 路径'$.*'表示匹配JSON根节点下的所有属性值
  • 用WITH KEY修饰的key_str列,会自动存储当前匹配到的属性的键名
  • val_str列直接取对应属性的值即可

执行后输出结果完全符合你的预期:

KEY_STRVAL_STR
ABC123
DEF456
GHI789

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:09:02