多个节点同名时使用 Oracle SQL 获取 JSON_VALUE
Posted
技术标签:
【中文标题】多个节点同名时使用 Oracle SQL 获取 JSON_VALUE【英文标题】:Get JSON_VALUE with Oracle SQL when multiple nodes share the same name 【发布时间】:2017-01-27 17:27:34 【问题描述】:我有一个问题,我的 oracle 数据库中存储了一些 JSON,我需要从中提取值。
问题是,有些字段是重复的。
当我尝试这个时,它可以工作,因为选项数组中只有一个名字键:
SELECT
JSON_VALUE('"increment_id":"2500000043","item_id":"845768","options":["firstname":"Kevin","lastname":"Test"]', '$.options.firstname') AS value
FROM DUAL;
返回“Kevin”。
但是,当 firstname 字段有两个值时:
SELECT JSON_VALUE('"increment_id":"2500000043","item_id":"845768","options":["firstname":"Kevin","firstname":"Okay","lastname":"Test"]', '$.options.firstname') AS value
FROM DUAL;
它只返回 NULL。
在这种情况下,有什么方法可以选择“名字”的第一次出现?
【问题讨论】:
【参考方案1】:JSON_VALUE 从 JSON 数据中返回一个 SQL VALUE(如果键不存在,则返回 SQL NULL)。
如果您有一组值(JSON 数组)并且您想要数组的一个特定项,您可以使用数组下标(方括号),就像在 javascript 中一样,例如 [2] 来选择第三项。 [0] 选择第一项。 要获取示例中的第一个数组项,您必须将路径表达式从 '$.options.firstname' 更改为 '$.options[0].firstname'
【讨论】:
【参考方案2】:您可以按照以下查询:-
SELECT JSON_VALUE('
"increment_id": "2500000043",
"item_id": "845768",
"options": [
"firstname": "Kevin"
,
"firstname": "Okay"
,
"lastname": "Test"
]
', '$.options[0].firstname') AS value
FROM DUAL;
【讨论】:
以上是关于多个节点同名时使用 Oracle SQL 获取 JSON_VALUE的主要内容,如果未能解决你的问题,请参考以下文章
Oracle ---- 同一个SQL文在RAC环境多个节点的结果一定相同吗?