1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/huanghongbo-pljson

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 5.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 04:43 86e0f52

PL/JSON предоставляет пакеты и API для работы с данными в формате JSON в коде PL/SQL.

Общая информация о JSON доступна по адресу http://www.json.org.

Пример того, что можно делать с PL/JSON

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/huanghongbo-pljson.git
git@api.gitlife.ru:oschina-mirror/huanghongbo-pljson.git
oschina-mirror
huanghongbo-pljson
huanghongbo-pljson
master