当多个节点共享相同的名称时,使用 Oracle SQL 获得JSON_VALUE



我有一个问题,我的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;

相关内容

  • 没有找到相关文章

最新更新