Парсинг 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? Какие-то известные библиотеки с открытым кодом, например, или вроде того?