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_STR | VAL_STR |
|---|---|
| ABC | 123 |
| DEF | 456 |
| GHI | 789 |
内容的提问来源于stack exchange,提问作者user1289117
相关产品推荐
相关产品推荐

