Конструктор правил разбора JSON

book.png Конструктор правил выборки позволяет создавать правила выгрузки на основании имеющегося образца с данными в формате JSON, а также просматривать данные в JSON формате.
Конструктор умеет собирать статистику по повторяющимся структурам в JSON данных. Используется это для прогнозирования формата данных и размерностей полей таблицы приёмника, а также визуальной оценки заполняемости полей данными.


Ключевые понятия

  • Дерево данных – Структура данных свойственная таким типам данных как JSON, XML. В такой структуре каждый элемент может находится в отношениях родитель/подчинённый к другим элементам структуры.

  • Узел дерева – Синоним элемента структуры дерева.

  • Корень (дерева данных) – Первый узел в иерархии подчинённости дерева данных обозначается как «$».

  • Путь элемента – Последовательность имен или индексов узлов от корня дерева до указанного элемента (включительно).
    Например: $.ServiceResponses[0].application.details.accident[0].accident_date

  • Точка итерации – Элемент дерева, подчиненные элементы которого имеют одинаковую структуру или тип данных. Обозначается как: «<ИмяЭлемента>[<Параметры среза>]».

  • Параметры среза – Параметры описывающие какие именно подчиненные элементы участвуют в выборке.
    Для типа данных «Объект» допустимо указание параметров среза только:

    • [*] - все элементы

    Для типа данных «Массив»:

    • [*] - все элементы.
    • [0, 1, 2, 3] – элементы с индексами 0, 1, 2, 3.
    • [20:100] – (диапазон) элементы с индексами от 20 до 100.
    • [20:100, 200:300] – (диапазон) элементы с индексами от 20 до 100 и от 200 до 300.
    • [20:-1] – (диапазон) элементы от 20 до последнего.
    • [-1] – последний элемент.
      Все диапазоны указываются включительно (содержат в том числе и граничные элементы)
  • Путь итерации - Последовательность имен или индексов узлов от корня дерева до крайней точки итерации с указанием параметров среза точек итерации.
    Например: $.ServiceResponses[*].application.details.accident[0:5].

  • Итерационный путь элемента - Последовательность имен или индексов узлов от корня дерева до указанного элемента (включительно), с указанием параметров среза точек итерации.
    Например: $.ServiceResponses[*].application.details.accident[0:5] .accident_date.

  • Правила разбора данных – совокупность путей до элементов и/или итерационных путей элементов участвующих в выборке, с указанием сопутствующих параметров (Типы данных, имена полей и т.д.).

  • Набор правил - совокупность путей до элементов и/или итерационных путей элементов участвующих в выборке, относящихся к одному пути итерации.

  • Распределённый элемент - Элемент присутствующий в разных ветвях дерева данных, но имеющий для всех экземпляров одинаковый итерационный путь элемента.

  • Статистика элемента - Расчётные показатели распределённого элемента, такие как:

    • Тип данных
    • % В наличии
    • % Null
    • % Пустых
    • Минимальное и максимальное значение.
    • Рекомендуемая длина и точность поля таблицы приёмника для элемента.
  • Псевдоэлемент дерева - элемент отображаемого дерева данных не имеющий под собой конкретной основы в данных. Служит для настройки или асоциации с текущим (на момент выборки) элементом. Например элементы отображающие параметры среза для точки итерации, или элементы означающие имя/индекс текущего (на момент выборки) элемента.

Диалог конструктора

Диалог конструктора имеет две рабочие области (область данных и облать правил) и панель с кнопками служебных функций.
При открытии конструктора для редактирования правила, область данных будет скрыта, а область правила показана. При отрытии конструктора для просмотра данных, наоборот область правила будет скрыта, а область данных показана. Если конструктор открывается для создания/редактирования правила, но с передачей в него данных, обе область быдут показаны. Однако вы в любой момент можете включить/выключить видимость нужных вам областей при помощи кнопок на панели функций: JSON_КонструкторПанельФункций_ВидимостьОбластиДанных.png JSON_КонструкторПанельФункций_ВидимостьОбластиПравил.png .

Область данных


book.png Область данных служит для отображения загруженных данных.
Просмотр данных возможен как в виде дерева, так и в виде текста. Снизу расположены вкладки “Данные(дерево)” и “Данные(текст)”, перемещаясь по которым можно изменять способ отображения (дерево или текст). Отображение в виде дерева позволяет только просматривать структуру данных. Текст же можно редактировать.
Дерево имеет два режима просмотра: режим просмотра значений элементов и режим просмотра статистики по значениям распределённых элементов.


JSON_КонструкторОбластьДанных.png

Область правил


book.png Область правил содержит коллекцию правил выборки элементов и описание структуры полей таблицы приёмника.


JSON_КонструкторОбластьПравил.png

Панель служебных функций

Позволяет:

  • Выполнять выборку данных из предварительно загруженных json данных
  • Управлять праметрами выборки
  • Загружать json данные
  • Выбирать кодировку элементов json текстового типа
  • Устанавливать значение предела итераций для области просмотра данных
  • Управлять видимостью Области данных
  • Управлять видимостью Области правил
  • Отслеживать текущие процессы конструктора (отображается в правом верхнем углу)
  • Переключать режим отображения дерева данных (статистика/значения)

JSON_КонструкторПанельФункций.png

Представленные функции

Загрузить JSON - Позволяет загрузить JSON данные. После загрузки данные будут доступны для просмотра в Области данных.
JSON_КонструкторПанельФункций_Загрузка.png

Кодировка - Позволяет явно указать какую кодировку нужно использовать при выборки данных текстового типа.
Автоопределение будет срабатывать только при наличии в загруженных данных Byte Order Mark (BOM).
JSON_КонструкторПанельФункций_Кодировка.png

Предел итераций - Позволяет ограничить количество элементов отображающихся в узле дерева данных выбранным значением.
Также влияет на количество элементов участвующих в расчёте статистики, ограничивая его выбранным значением для каждого узла (точки) итерации (например для значения в 100 элементов при 2 точках итерации (в пути до элемента) фактическое количество будет равно 100 * 100 = 10 000).
Цель данного ограничителя - снизить нагрузку на сервер и тем самым сократить временные задержки в реакции интерфейса пользователя, при разворачивании дерева данных в области данных конструктора.
Если необходимо расчитать статистику максимально точно, целесобразно увеличить значение до максимально необходимого, что конечно приведёт к увеличению задержки при разворачивании узлов дерева.

JSON_КонструкторПанельФункций_ПределИтераций.png

Видимость области данных - Включает/выключает отображение области данных конструктора.
JSON_КонструкторПанельФункций_ВидимостьОбластиДанных.png

Видимость области правил - Включает/выключает отображение области правил конструктора.
JSON_КонструкторПанельФункций_ВидимостьОбластиПравил.png

Выбрать данные - Запускает процесс извлечения данных по правилу. По окончании процесса откроется окно просмотра выбранных по правилу данных.
JSON_КонструкторПанельФункций_Выбрать.png

Параметры выборки - Позволяет указать дополнительные параметры выборки.
Доступные параметры:

  • Использовать null как значение по умолчанию - При активизации данного параметра алгоритм выборки будет игнорировать настройки правила в части установленных значений по умолчанию, значения отсутствующих элементов будут загружены как null-значения.
    Полезно для визуального анализа заполняемости таблицы приёмника данными.
    Не влияет на последующее использование правила.

JSON_КонструкторПанельФункций_ПараметрыВыборки.png

Выбор режима дерева данных - Позволяет переключать дерево данных (в области данных) между режимами просмотра данных и просмотра статистики.
Состояние выключателя:

  • включен - Дерево отображает статистику.
  • выключен - Дерево отображает значения.

JSON_КонструкторПанельФункций_РежимДерева.png

Текущий путь итерации - Путь итерации текущего набора правил.
Текущий путь итерации имеет два режима отображения. Режим отображения зависит от режима отображения дерева данных:

  • Режим отображения дерева данных - показывать статистику
    JSON_КонструкторПанельФункций_ТекущийПутьИтерации1.png
    Если текущий путь итерации не умещается целиком на экране, при помощи кнопок JSON_КонструкторПанельФункций_СмещениеЭлементовТекущегоПутиИтерации.png можно сдвигать элементы пути вправо/влево для обзора всех элементов.

  • Режим отображения дерева данных - показывать значения
    JSON_КонструкторПанельФункций_ТекущийПутьИтерации2.png

Сбросить текущий путь итерации - Позволяет сбросить текущий путь итерации в одно действие.
Доступна если список правил пуст или область правила откреплена от области данных.
JSON_КонструкторПанельФункций_ОчиститьТекущийПутьИтерации.png

Область данных

Дерево данных: режим статистики

JSON_КонструкторОбластьДанных_РежимСтатистики.png

Описание полей:
JSON_КонструкторОбластьДанных_РежимСтатистики_Заголовки.png

  • Имя - Имя элемента дерева данных или имя псевдоэлемента или параметры среза в виде строки.
  • Признак точки итерации - хс_ТочкаИтерацииСветлоСиняя_16.png - Обозначает узлы выбранные в качестве точек итерации.
  • Тип - Тип JSON элемента. Если элементы, будучи распределёнными, имеют разные типы то они будут перечислены через запятую, а поле окрасится красным цветом. Данные из полей смешанного типа допускается собирать только в виде json данных (см. настроку правила).
  • Всего % - Процент значений элемента в выборке по текущему правилу от общего числа строк в результате выборки.
  • Null % - Процент отсутствующих значений элемента в выборке по текущему правилу от общего числа строк в результате выборки. Сюда входят как элементы со значениям null, так и элементы отсутствующие, но ожидаемые. Элемент является ожидаемым если в некоторых узлах он присутствует, а в других нет.
  • Пустые % - Процент пустых значений элемента в выборке от общего числа строк в результате выборки. К пустым относятся пустые строки для текстового типа элемента и нулевое значение элемента для числового типа элемента.
  • Мин. - Минимальное значение элемента в выборке. Для числового типа элемента - это минимальное числовое значение элемента. Для текстового типа элемента - это минимальная длина строки. По типам данных элемента отличным от текстового или числового данный показатель не рассчитывается.
  • Макс. - Максимальное значение элемента в выборке. Для числового типа элемента - это максимальное числовое значение элемента. Для текстового типа элемента - это максимальная длина строки. По типам данных элемента отличным от текстового или числового данный показатель не рассчитывается.
  • Длина - Рекомендуемая для поля таблицы приёмника длина. Для строкового типа - длина строки. Для числового - максимальное количество цифр в числе. Например, для числа 91234567.89 длина - 10. Этот показатель идентичен параметру поля таблицы СУБД character_maximum_length и precision соответственно для строк и чисел. Подсчитывается только для числового и текстового типов элемента.
  • Точность - Рекомендуемая для поля таблицы приёмника размер дробной части. Этот показатель идентичен параметру поля таблицы СУБД scale. Подсчитывается только для числового типа элемента.

Дерево данных: режим значений

JSON_КонструкторОбластьДанных_РежимЗначений.png

Описание полей:
JSON_КонструкторОбластьДанных_РежимЗначений_Заголовки.png

  • Имя - Имя элемента дерева данных или имя псевдоэлемента или параметры среза в виде строки.
  • Признак точки итерации - хс_ТочкаИтерацииСветлоСиняя_16.png - Обозначает узлы выбранные в качестве точек итерации.
  • Тип - Тип JSON элемента.
  • Значение - Поле отображающее значение элементов чиcловых и булевых типов, а также null.
  • Строковое значение - Поле отображающее значение элементов строкового типа.

Панель функций дерева данных

JSON_КонструкторОбластьДанных_ПанельФункций.png

  • JSON_КонструкторОбластьДанных_ПанельФункций_ТочкаИтерацииПлюс.png / JSON_КонструкторОбластьДанных_ПанельФункций_ТочкаИтерацииМинус.png - Позволяет выбрать элемент дерева в качестве точки итерации или отменить выбор элемента в качестве точки итерации. При отмене выбора элемента в качестве точки итерации все нижележащие точки итерации будут также отменены.
    Чтобы выбрать элемент в качестве точки итерации его необходимо предварительно развернуть. В момент разворачивания будет прочитана структура нижележащих элементов и проведена оценка возможности использования данного узла в качестве точки итерации. Оценка проводится на предмет совпадения типов данных элементов. Типы должны быть одинаковыми и не содержать смешанные типы.
    Доступна только в режиме просмотра статистики.

  • JSON_КонструкторОбластьДанных_ПанельФункций_Фильтр.png - Открывает диалог настройки параметров среза точки итерации. Доступна только для настройки параметров среза элемента типа Массив.
    Для настройки параметров среза, необходимо предварительно развернуть узел дерева выбранного в качестве точки итерации. В списке элементов выбрать псевдоэлемент с изображением JSON_КонструкторОбластьДанных_ЭлементФильтр.png. Кнопка функции станет активной.
    Доступна только в режиме просмотра статистики.

  • JSON_КонструкторОбластьДанных_ПанельФункций_ВсеЗначения.png - Позволяет посмотреть все значения распределённого элемента. Предварительно нужный элемент необходимо выбрать в дереве данных.
    Отображается только в режиме просмотра статистики.

  • JSON_КонструкторОбластьДанных_ПанельФункций_Статистика.png - Включает/отключает сбор и отображение статистики в режиме просмотра статистики.
    Если объём данных большой, а посмотреть нужно только структуру дерева, можно использовать эту функцию и отключить сбор статистики. Вернуться к сбору статистики можно в любой момент.
    Отображается только в режиме просмотра статистики.

  • JSON_КонструкторОбластьДанных_ПанельФункций_Путь.png - Отображает путь до текущего выбранного элемента дерева.

Псевдоэлементы дерева данных

При выборе элемента дерева в качестве точки итерации элемент сворачивается, а в его содержимом появляется два псевдоэлемента:

  • JSON_КонструкторОбластьДанных_ЭлементФильтр.png - Параметры среза - Отображает текущую настройку среза в виде строки вида “[0:5, 10, 20:-1]” или “[*]”. Содержит в качестве дочерних элементов свернутую структуру повторяющихся элементов. По двойному нажатию открывает диалог настройки параметров среза. В контекстном меню элемента присутствует команда “Параметры среза”, которая также открывает диалог настройки параметров среза.
  • JSON_КонструкторОбластьДанных_ЭлементЛокация.png - Текущее положение - Имя элемента зависит от типа радителя, для массива - “Индекс элемента”, для объекта “Имя элемента”. Используется для формирования правила выборки имени/индекса текущего элемента, методом перетаскивания в область правила. Если в результатах выборки нужно получать не только данные элементов, но и их имена/индексы, используйте этот элемент для формирования соответствующей строки правила.

Контекстное меню дерева данных

JSON_КонструкторОбластьДанных_ДеревоДанных_КонтекстноеМеню.png

Диалог настройки параметров среза

Отображает настройки параметров среза выбранного элемента.
Каждая строка задаёт диапазон значениий или единичный элемент. Единичные элементы указываются ввиде одинаковых индексов для начала и конца диапазона. Нумерация индексов начинается с нуля. Если необходимо указать элементы с конца, необходимо указывать отрицательные знаяения: -1 - последний элемент, -2 - предпоследний и т.д. Внесённые изменения применятся при закрытии окна диалога настроек параметров среза.

JSON_КонструкторОбластьДанных_ДеревоДанных_ПараметрыСреза.png

Просмотр данных в виде текста

В нижнем левом углу присутствуют вкладки JSON_КонструкторОбластьДанных_Вкладки.png перемещаясь по которым можно изменять способ отображения данных (дерево или текст). Дерево позволяет только просматривать структуру данных JSON. Текст можно редактировать. Окно просмотра данных в виде текста находится на вкладке “Данные (текст)”. JSON_КонструкторОбластьДанных_РежимТекст.png

В окне просмотра текста имеется кнопка команды позволяющая отформатировать текст для улучшения читаемости.
JSON_КонструкторОбластьДанных_РежимТекст_Форматировать.png

Область правила


book.png Область правил содержит коллекцию строк с правилами выбора значений и панель с функциями для работы с коллекцией.


Коллекция строк с правилами выбора значений

JSON_КонструкторОбластьПравил_КоллекцияПравил.png

Значения колонок таблицы коллекции:
JSON_КонструкторОбластьПравил_КоллекцияПравил_Заголовки.png

  • Имя поля - Имя колонки таблицы в которую следует поместить значение из первичных данных.
  • Тип поля - Тип данных колонки таблицы
  • Путь к элементу - Описание пути к элементу внутри первичных данных в формате JSONPath.
  • Тип элемента - Ожидаемый тип элемента в первичных данных. Используется для проверки/приведения типа.
    Если тип элемента в первичных данных не соответствует указанному, данные элемента загружены не будут.
    Если выбрать тип элемента аналогичный типу первичных данных (пример: JSON-json), то данные элемента будут загружены в оригинальном формате. Таким образом можно загружать целиком блоки данных, например массив JSON можно поместить в одну колонку таблицы с типом text или jsonb.
    Если тип поля таблицы и тип поля элемента отличаются, будет выполнена попытка приведения типа элемент к типу поля. В ситуациях когда приведение не очевидно, есть варианты для таких типов, например: «Дата строкой (ISO)» подсказывает, что данные имеют строковой тип, но представляют собой дату в ISO формате.
  • ! - Флаг необязательного элемента. Необязательным является такой элемент, данные из которого не нужны сами по себе, а только совместно с данными обязательных элементов. Таким образом, если данных в обязательных элементах не окажется, не обязательные загружены не будут.
  • По умолчанию – Значение по умолчанию для колонки таблицы. Используется если элемент в данных отсутствует, не содержит значение или не может быть приведён к типу данных колонки таблицы.

Внизу коллекции строк находятся вкладки наборов JSON_КонструкторОбластьПравил_ПанельФункций_Вкладки.png. Наборы позволяют загружать в одну таблицу строки, полученные из разных областей первичных данных. Все наборы описывают общую структуру таблицы приёмника, но содержат разные пути к элементам. Для добавления/удаления наборов используются кнопки на панели функций.

Панель функций

JSON_КонструкторОбластьПравил_ПанельФункций.png

На панели функций представлены следующие функции для работы с коллекцией:

  • JSON_КонструкторОбластьПравил_ПанельФункций_Перемещение.png - Перемещение строк коллекции по списку. При этом меняется очерёдность в которой колонки будут описаны при создании таблицы.
  • JSON_КонструкторОбластьПравил_ПанельФункций_Добавить.png - Добавляет новую строку правила загрузки элемента в коллекцию.
  • JSON_КонструкторОбластьПравил_ПанельФункций_Сортировать.png - Сортирует строки коллекции по имени колонки (по возрастанию).
  • JSON_КонструкторОбластьПравил_ПанельФункций_ОчиститьПути.png - Очищает пути к элементам у всех строк текущего набора.
  • JSON_КонструкторОбластьПравил_ПанельФункций_УдалитьПравила.png - Полностью очищает коллекцию правил
  • JSON_КонструкторОбластьПравил_ПанельФункций_ПоУмолчанию.png - Заполняет значения по умолчанию типовыми значениями. Заполняются только те позиции в коллекции, значение по умолчанию для которых выставлено в Null.
  • JSON_КонструкторОбластьПравил_ПанельФункций_Таблица.png - Открывает коллекцию как таблицу в отдельном окне. Эта функция позволяет сохранить правила в табличный документ (файл), или перенести коллекцию (через буфер обмена) в другое правило или в другой конструктор. Например из ETL тестового контура в рабочий. Таблица доступна для редактирования. Все внесённые изменения отразятся на коллекции правил после закрытия окна с таблицей.
  • JSON_КонструкторОбластьПравил_ПанельФункций_Записать.png - Сохраняет текущее правило в справочник правил разбора данных. Если правило новое, то будет предложено ввести имя. Если правило модифицируется пользователем, то данная кнопка подсвечивается розовым контуром, для сигнализации о необходимости сохранения изменений.
  • JSON_КонструкторОбластьПравил_ПанельФункций_Выбор.png - Поле с именем текущего правила разбора данных. При необходимости, правило можно поменять через стандартный диалог выбора из выпадающего списка.
  • JSON_КонструкторОбластьПравил_ПанельФункций_Закрепление.png - Открепляет/прикрепляет правила к дереву данных. Дерево данных сворачивается согласно пути итерации текущего набора. При модификации пути итерации будет происходить автоматическая синхронизация путей правил с путём итерации. Если необходимо временно отключить автоматическую синхронизацию, то с помощью данной функции это можно сделать. При это откреплённое правило будет отображать свой собственный путь итерации соответствующий правилу JSON_КонструкторОбластьПравил_ПанельФункций_ПутьПравила.png. Кнопка JSON_КонструкторОбластьПравил_ПанельФункций_СинхронизироватьПуть.png служить для ручной синхронизации итерационного пути дерева с итерационным путём правила.
  • JSON_КонструкторОбластьПравил_ПанельФункций_Переместить.png - Меняет местами панель данных и панель правила.
  • JSON_КонструкторОбластьПравил_ПанельФункций_ПоказатьУмолчания.png - Показывает/скрывает колонку значений по умолчанию.
  • JSON_КонструкторОбластьПравил_ПанельФункций_ДобавитьНабор.png - Добавляет новый набор.
  • JSON_КонструкторОбластьПравил_ПанельФункций_ИмяНабора.png - Позволяет задать произвольное имя текущего набора.
  • JSON_КонструкторОбластьПравил_ПанельФункций_УдалитьНабора.png - Удаляет текущий набор.

Добавление элементов в коллекцию строк правила

Добавить новый элемент в коллекцию можно:

  • Перетащив его из дерева данных в область правила. При этом, если это единичный элемент будет создана одна строка в правиле. Если элемент содержит дочерние элементы и развернут, то в правило будут добавлены строки соответствующие дочерним элементам с типами строка, число, булево. Если элемент не развёрнут, то он добавится в виде одной строки с типом данных json, что позволит загрузить всю ветвь в виде строки в ячейку таблицы.
  • Перетащив его из дерева данных в область правила на поле “Путь к элементу” с незаполненым путем. Имя поля таблицы и тип поля останутся без изменения, а путь и тип элемента заполнятся значениями перетаскиваемого элемента.
  • Предварительно выдилив в дереве данных несколько элементов, перетащить их на область правила. Добавится столько строк правила, сколько было выделено элементов типа строка, число, булево.
  • При отключенной панели данных двойным щелчком на поле с изображением JSON_КонструкторОбластьПравил_КоллекцияПравил_ПолеВыбора.png открыть область данных и в ней выбрать (двойным щелчком) целевой элемент дерева.