我有一个问题,我的oracle数据库中存储了一些JSON,我需要从中提取值。
问题是,有些字段是重复的。
当我尝试这样做时,它的工作原理是选项数组中只有一个名字键:
SELECT
JSON_VALUE('{"increment_id":"2500000043","item_id":"845768","options":[{"firstname":"Kevin"},{"lastname":"Test"}]}', '$.options.firstname') AS value
FROM DUAL;
返回"凯文"。
但是,当名字字段有两个值时:
SELECT JSON_VALUE('{"increment_id":"2500000043","item_id":"845768","options":[{"firstname":"Kevin"},{"firstname":"Okay"},{"lastname":"Test"}]}', '$.options.firstname') AS value
FROM DUAL;
它只返回 NULL。
在这种情况下,有没有办法选择"名字"的第一个出现?
JSON_VALUE从 JSON 数据返回一个 SQL 值(如果键不存在,则返回 SQL NULL)。
如果你有一个值集合(一个JSON数组),你想要数组的一个特定项目,你使用数组下标(方括号),就像在JavaScript中一样,例如[2]来选择第三个项目。[0] 选择第一项。要获取示例中的第一个数组项,您必须将路径表达式从"$.options.firstname"更改为"$.options[0].firstname"
您可以按照以下查询进行操作:-
SELECT JSON_VALUE('{
"increment_id": "2500000043",
"item_id": "845768",
"options": [
{
"firstname": "Kevin"
},
{
"firstname": "Okay"
},
{
"lastname": "Test"
}
]
}', '$.options[0].firstname') AS value
FROM DUAL;