Наряду с другими технологиями (например, XML) при коммуникации клиента с сервером применяется нотация объектов JavaScript (JSON). На сервере данные, закодированные в JavaScript-объекте, перед обработкой нужно разкодировать. О том, как это сделать в PL/SQL и пойдёт речь в этом посту.
В моём примере переменная var_json содержит строку, в которой закодирован JSON-объект с тремя атрибутами — число, строка и массив из строк.
var_json varchar2(1000) := '{ "attribute1": 1, "attribute2" : "string", "attribute3": ["member1", "member2"] }'; var_count NUMBER;
Для начала эту строку надо спарсить процедурой parse.
apex_json.parse(var_json);
После этого число и строку можно выдёргивать функциями get_number и get_varchar2.
dbms_output.put_line('attribute1 is ' || apex_json.get_number(p_path => 'attribute1')); dbms_output.put_line('attribute2 is ' || apex_json.get_varchar2(p_path => 'attribute2'));
Для определения длины массива (из скольки элементов состоит массив) существует функция get_count. Переменная var_count в этом случае типа number.
var_count := apex_json.get_count(p_path => 'attribute3'); dbms_output.put_line('var_count is ' || var_count);
Элементы массива можно выбрать по их индексу. Выводить элементы массива можно например в цикле (читайте также пост про циклы FOR и WHILE в PL/SQL).
dbms_output.put_line('attribute3[1] is ' || apex_json.get_varchar2(p_path => 'attribute3[1]')); dbms_output.put_line('attribute3[2] is ' || apex_json.get_varchar2(p_path => 'attribute3[2]'));
Кому этот пост показался недостаточно развёрнутым, пускай курит официальную документацию пакета APEX_JSON и более подробное руководство (и то, и другое на английском).
Понравился пост? Поделись в соцсетях и подписывайся на аккаунты в Twitter и Facebook!