Слияние кода завершено, страница обновится автоматически
PL/JSON предоставляет пакеты и API для работы с данными в формате JSON в коде PL/SQL.
Общая информация о JSON доступна по адресу http://www.json.org.
declare
obj pljson;
list pljson_list;
begin
obj := pljson('
{
"a": null,
"b": 12.243,
"c": 2e-3,
"d": [true, false, "abdc", [1,2,3]],
"e": [3, {"e2":3}],
"f": {
"f2":true
}
}');
obj.print;
-- эквивалентно print
dbms_output.put_line(obj.to_char);
-- печать компактным способом
obj.print(false);
-- эквивалент печати компактным способом
dbms_output.put_line(obj.to_char(false));
-- добавить к объекту JSON
obj.put('g', 'a little string');
-- удалить из объекта JSON
obj.remove('g');
-- подсчёт прямых членов в объекте JSON
dbms_output.put_line(obj.count);
-- проверить, существует ли элемент
if not obj.exist('json is good') then
obj.put('json is good', 'Yes!');
if obj.exist('json is good') then
obj.print;
dbms_output.put_line(':-)');
end if;
end if;
-- вы можете создавать списки (массивы) тоже
-- однако обратите внимание, что мы должны использовать функцию 'to_json_value' для объектов JSON
list := pljson_list(); -- свежий список;
list.append(pljson('{"lazy construction": true}').to_json_value);
list.append(pljson_list('[1,2,3,4,5]'));
list.print; -- пустые списки и вложенные списки поддерживаются
list := pljson_list('[1,2,3,[3, []]]');
list.print;
-- подсчет прямых членов в списке JSON
dbms_out.put_line(list.count);
-- также можно поместить объект JSON или списки JSON как значения
obj.put('вложенный json', pljson('{"ленивая конструкция": true}'));
obj.put('массив', pljson_list('[1,2,3,4,5]'));
obj.print;
-- поддержка дат
obj.put('дата', pljson_ext.to_json_value(to_date('2017-10-21', 'ГГГГ-ММ-ДД')));
-- и преобразовать его обратно
dbms_output.put_line(pljson_ext.to_date(obj.get('дата')));
obj := pljson(
'{
"a" : true,
"b" : [1,2,"3"],
"c" : {
"d" : [["массив массивов"], null, { "e": 7913 }]
}
}');
-- получить элементы с помощью выражения пути JSON
-- pljson поддерживает простое выражение точки пути и '[n]' для массивов
-- оно никогда не вызывает исключения (вместо этого возвращается значение null)
-- массивы индексируются начиная с 1
-- пустая строка в качестве пути возвращает весь объект JSON
-- можно использовать 'get_string', 'get_number' и т. д.
dbms_output.put_line(pljson_ext.get_number(obj, 'c.d[3].e'));
-- все объекты pljson_... являются копиями
-- поэтому модификация на месте затруднена
-- но put с путём может это сделать
pljson_ext.put(obj, 'c.d[3].e', 123);
obj.print;
-- если вы предоставите недопустимый путь, то будет выдана ошибка
-- однако вы можете указать путь, который не существует, но должен быть создан
-- массивы индексируются с 1.
-- пробелы будут заполнены значениями null
obj := pljson();
pljson_ext.put(obj, 'a[2].data.value[1][2].myarray', pljson_list('[1,2,3]'));
obj.print; -- заполнить пробелы
pljson_ext.put(obj, 'a[1]', 'filler1');
pljson_ext.put(obj, 'a[2].data.value[1][1]', 'filler2');
obj.print;
pljson_ext.put(obj, 'a[2].data', 7913);
obj.print;
obj := pljson(
'{
"a" : true,
"b" : [1,2,"3"],
"c" : {
"d" : [["массив массивов"], null, { "e": 7913 }]
}
}');
obj.print;
-- удалить элемент
pljson_ext.remove(obj, 'c.d[3].e');
obj.print;
-- удалить массив массивов
pljson_ext.remove(obj, 'c.d[1]');
obj.print;
-- удалить нулевой элемент
pljson_ext.remove(obj, 'c.d[1]');
obj.print;
-- вы можете игнорировать проверку на дубликаты ключей
obj := pljson();
-- позволяет быстро строить без проверок на повторяющиеся ключи
obj.check_duplicate(false);
for i in 1 .. 10 loop
obj.put('a'||i, i);
конец цикла;
obj.put('a'||5, 'tada');
obj.print;
obj.check_duplicate(true);
-- исправить возможные дубликаты, но не сохраняет порядок
obj.remove_duplicates();
obj.print;
-- создавать объекты JSON и списки из SQL-запросов
list := pljson_dyn.executeList('select * from tab');
list.print;
obj :=
*Примечание: в тексте запроса присутствуют фрагменты кода на языке PL/SQL, которые не были переведены.*
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )