Парсинг JSON в Oracle 11g

Нужно распарсить строку Json, включающей структуры и массивы структур. Понимаю, что вопрос поднимался, но пол часа гуглинга не дали удовлетворительного результата в силу имеющихся ограничений:

  • Мы не можем устанавливать крупные фреймворки (кроме компиляции одного отдельного пакета). Это лишает нас APEX.
  • Мы не можем использовать временные таблицы. Это лишает нас этого парсера.

Но есть обычные для plsql возможности:

  • Любые коллекции
  • Типы данных, объявленные на уровне пакета.
  • Собственно, в рамках одного пакета любой код, не противоречащий ограничениям.

Итак. Как пример рассмотрим:

vSrc :=
'{
  "NAME": "Петров Александр",
  "AGE": "35",
  "PARTNER":{
    "NAME":"Петрова Дарья",
    "AGE":"33"
  }
  "CHILDREN": [
    {
      "NAME": "Вася",
      "AGE": "4"
    },
    {
      "NAME": "Маша",
      "AGE": "8"
    }
  ]
}'

Мы хотим иметь возможность по адресу получать или значение, или массив json-строк. Например:

v_result := jsonAPI.getJson(source => vSrc, address => 'PARTNER.NAME');

Возвращает значение 'Петрова Дарья', а вызов

v_result := jsonAPI.getJson(source => vSrc, address => 'CHILDREN');

Вернет коллекцию, выведя которую кодом:

dbms_output.put_line('Первый ребенок:');
dbms_output.put_line(v_result(1));
dbms_output.put_line('Второй ребенок:');
dbms_output.put_line(v_result(2));

Мы увидим

Первый ребенок:
{"NAME":"Вася","AGE":"4"}
Второй ребенок:
{"NAME":"Маша","AGE":"8"}

Таким образом, мы можем использовать элементы этой коллекции как параметр для вызова того же api.

Есть ли способ парсить JSON примерно в таком духе на чистом PLSQL? Какие-то известные библиотеки с открытым кодом, например, или вроде того?


Ответы (0 шт):