Разбор JSON массива APEX_ JSON в PL SQL - PullRequest
1 голос
/ 16 февраля 2020

У меня есть следующий JSON объект -

{
  "items": [
    {
      "tableName": "contacts",
      "count": 1,
      "columnNames": [
        "id"
      ],
      "rows": [
        [
          "45"
        ]
      ]
    }
  ],
  "links": [
    {
      "rel": "self",

    },
    {
      "rel": "describedby",

    }
  ]
}

Я пытаюсь извлечь значение из строк - мне нужно значение 45.

Я пытался извлечь, используя -

row_id := apex_json.get_number ('rows[%d]', 1);

Как мне его извлечь? Заранее спасибо.

1 Ответ

1 голос
/ 16 февраля 2020

Вот пример:

declare

  l_json_val apex_json.t_values;
  l_clob     clob;
  l_row_val  varchar2(255);

begin

  l_clob := q'-
    {
      "items": [
        {
          "tableName": "contacts",
          "count": 1,
          "columnNames": [
            "id"
          ],
          "rows": [
            [
              "45"
            ]
          ]
        }
      ],
      "links": [
        {
          "rel": "self",

        },
        {
          "rel": "describedby",

        }
      ]
    }
  -';

  apex_json.parse(p_values => l_json_val, p_source => l_clob, p_strict => false); 

  l_row_val := apex_json.get_varchar2(p_path => 'items[1].rows[1][1]', p_values => l_json_val);

  dbms_output.put_line(l_row_val);

end;

Обратите внимание, что выражения пути с apex_ json используют 1 индекс базового массива, а не 0.

...