Получение и обработка данных в формате JSON от веб-сервиса REST
Задача
Получить с портала "Открытые данные России" по API документ "График работы и адреса обслуживания Читального зала Центрального государственного архива города Москвы", записать его в файл на диск, а также разобрать полученные данные по структуре для дальнейшего использования (например, для вставки и обновления строк Колибри).
Исходные данные
Перед тем как приступить к решению задачи, обратимся к паспорту API "График работы и адреса обслуживания Читального зала Центрального государственного архива города Москвы" для определения адреса сервера, веб-службы и возможностей параметризации запроса.
Сценарий решения задачи
Решение задачи будет заключаться в создании процесса, который будет включать следующие шаги:
- Отправка запроса в веб-службу.
- Преобразование полученных данных в файл (поток байт).
- Запись файла на диск.
- Разбор и обработка полученных от веб-службы данных типа JSON.
4.1. Извлечение данных из первого уровня JSON-объекта
4.2. Извлечение данных из второго уровня JSON-объекта.
Используемые узлы
Веб-служба REST/JSON
Преобразовать в байты
Запись в файл
Таблица JSON
Проекция
Развернуть ячейки в строки
Построение и настройка процесса
Создадим и сохраним новый процесс.
Для получения данных из веб-сервиса в формате JSON добавим в процесс узел Веб-служба REST/JSON.
У узла Веб-служба REST/JSON установим название "График работы" и настроим свойства.
Свойство Значение Адрес сервера https://data.gov.ru
Адрес веб-службы opendata/7728073222-2/data-20181120T0100.json
HTTP метод GET
HTTP заголовки Не требуются по паспорту API Выполним проверку процесса, при наличии ошибок исправим их.
Запустим процесс в отладке для просмотра результатов узла "График работы".
Для сохранения полученного ответа в файл на диск, сначала необходимо преобразовать полученные данные формата JSON в поток байт.
Для этого добавим узел Преобразовать в байты и соединим его входной порт с выходным портом узла "График работы".
Настроим свойства узла Преобразовать в байты.
Для сохранения полученного файла на диск добавим узел Запись в файл и соединим его входной порт с выходным портом узла "Преобразовать в байты".
У узла Запись в файл установим название "Запись полученного ответа в файл" и настроим свойства.
Выполним проверку процесса, при наличии ошибок исправим их.
Запустим процесс в отладке. Полученный по API документ будет сохранен в файл на диск.
Для дальнейшей обработки полученных данных (JSON-документа) добавим в процесс узел Таблица JSON и соединим его входной порт с выходным портом узла "График работы".
У узла Таблица JSON установим название узла "График работы и адреса обслуживания" и настроим свойства в соответствии с пришедшими данными.
Данные о графике и адресах пришли в корневом JSON-объекте, который является массивом, поэтому свойство "Путь к объекту" оставим не заполненным, свойство "Режим документа" не устанавливаем.
Свойства JSON-объектаAddress
иRoomNumber
получим, добавив соответствующие колонки.
Свойство JSON-объектаWorkingHours
(рабочие часы) представляет собой вложенный JSON-объект, который также является массивом. Для извлечения данных о рабочих часах потребуется сначала получить свойствоWorkingHours
в виде JSON-объекта, а далее обработать его с помощью дополнительных узлов.
Выполним проверку процесса, при наличии ошибок исправим их.
Запустим процесс в отладке для просмотра результатов узла "График работы и адреса обслуживания".
Обрабатываемый JSON-объект содержал 3 элемента, которые преобразованы в строки выходной таблицы.
Для получения данных из свойства
WorkingHours
сначала преобразуем данные из JSON-объекта в массив.
Для этого добавим в процесс узел Проекция и соединим его входной порт с выходным портом узла "График работы и адреса обслуживания".
У узла Проекция установим название "Проекция Графика работы", настроим свойства и добавим вычисляемую колонку "Рабочие часы".
Полученный в узле "Проекция Графика работы" массив "Рабочие часы" развернем в строки по элементам массива.
Для этого добавим в процесс узел Развернуть ячейки в строки, соединим его входной порт с выходным портом узла "Проекция Графика работы".
Настроим свойства узла Развернуть ячейки в строки.
Выполним проверку процесса, при наличии ошибок исправим их.
Запустим процесс в отладке для просмотра результатов узла "Развернуть ячейки в строки".
Для каждого элемента массива "Рабочие часы" были созданы копии строк. Колонка "Рабочие часы" содержит JSON-объект.
Для получения свойств JSON-объект "Рабочие часы" добавим в процесс узел Проекция, соединим его входной порт с выходным портом узла "Развернуть ячейки в строки".
У узла Проекция установим название "Проекция Рабочие часы", настроим свойства и добавим две вычисляемые колонки "Дни недели" и "Часы".
Выполним проверку процесса, при наличии ошибок исправим их.
Запустим процесс в отладке для просмотра результатов узла "Проекция Рабочие часы".
Далее полученная из узла "Проекция Рабочие часы" таблица с данными может быть обработана с помощью других узлов, а данные записаны в хранилище.