【问题标题】:Get JSON_VALUE with Oracle SQL when multiple nodes share the same name多个节点同名时使用 Oracle SQL 获取 JSON_VALUE
【发布时间】: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。

在这种情况下,有什么方法可以选择“名字”的第一次出现?

【问题讨论】:

    标签: sql json oracle plsql


    【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-09
        • 1970-01-01
        • 2021-02-12
        • 1970-01-01
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        • 2013-02-27
        相关资源
        最近更新 更多