Приходилось ли вам по шаблону JSON тела запроса собирать данные для построения объекта: готовить массивы, подготавливать структуры, по окончании сбора одной структуры или массива записывать их как значения в другую структуру или массив?
Если да, то вы попали туда, куда нужно.
Представляю вам Генератор JSON объектов.
Что это такое?
- Обработка с программным интерфейсом, для встраивания в конфигурацию. Построена с помощью паттерна fluent builder (строитель).
Для чего?
- Удобно собирать данные в структуры и массивы структур
Кейс использования:
Необходимо собрать данные и отправить запрос в стороннюю систему по REST протоколу. Запрос POST и соответственно формат тела запроса следующий:
{
"customerData": {
"name": "Ivan",
"surname": "Ivanov",
"children": [
{
"name": "Natalya",
"pets": [
{
"type": "dog",
"name": "Sharik",
"age": 10
}
]
}
]
}
}
Как бы происходила сборка данных обычными средствами 1С:
Данные = Новый Структура;
Данные.Вставить("name", "Ivan");
Данные.Вставить("surname", "Ivanov");
Питомец = Новый Структура;
Питомец.Вставить("type", "dog");
Питомец.Вставить("name", "Sharik");
Питомец.Вставить("age", 10);
Питомцы = Новый Массив;
Питомцы.Добавить(Питомец);
Ребенок = Новый Структура;
Ребенок.Вставить("name", "Natalya");
Ребенок.Вставить("pets", Питомцы);
Дети = Новый Массив;
Дети.Добавить(Ребенок);
Данные.Вставить("children", Дети);
ОберткаДляЗапроса = Новый Структура;
ОберткаДляЗапроса.Вставить("customerData", Данные);
JSON = КоннекторHHTP.ОбъектВJson(ОберткаДляЗапроса);
Наглядно представим схему заполнения структур и массивов
Видно, что, чтобы заполнить верхний уровень структуры нужно создать нижние: чтобы наполнить массив "pets" нужно для начала создать все объекты pets этого массива, чтобы наполнить массив "children" нужно создать объекты этого массива со всеми объектами подструктур и т.д.
Как бы произошло создание объекта с помощью Генератора JSON объектов:
ОбъектJSON = Обработки.ГенераторJSONОбъектов.Создать().Конструктор()
.СоздатьСтруктуру()
.ВставитьИЖдатьЗакрытия("customerData")
.СоздатьСтруктуру()
.Вставить("name", "Ivan")
.Вставить("surname", "Ivanov")
.ВставитьИЖдатьЗакрытия("children")
.СоздатьМассив()
.ДобавитьИЖдатьЗакрытия()
.СоздатьСтруктуру()
.Вставить("name", "Natalya")
.ВставитьИЖдатьЗакрытия("pets")
.СоздатьМассив()
.ДобавитьИЖдатьЗакрытия()
.СоздатьСтруктуру()
.Вставить("type", "dog")
.Вставить("name", "Sharik")
.Вставить("age", 10)
.Закрыть()
.Закрыть()
.Закрыть()
.Закрыть()
.Закрыть()
.ПолучитьОбъект();
Схема формирования объекта с помощью Генератора JSON объектов:
Функции Генератора в точности повторяют не только действия, но даже вид JSON.
Возможности Генератора:
- Прерывание создания файла в любом месте, обход любых коллекций в цикле и продолжение использования команд Генератора
- Добавление множества значений в массивы и структуры путем вызова команд "ДобавитьНесколько" и "ВставитьНесколько" для массива и структуры соответственно
- Передавать на вход конструктор существующий объект типа Массив или Структура:
-
ПользователиМ = Новый Массив; ПользователиМ.Добавить("Владимир"); ПользователиМ.Добавить("Евгений"); Генератор = Обработки.ГенераторJSONОбъектов.Создать(); ОбъектJSON = Генератор.Конструктор(ПользователиМ) .Добавить("Максим") .ПолучитьОбъект();
-
Для более собранного вида в строках ДобавитьИЖдатьЗакрытия и ВставитьИЖдатьЗакрытия можно дописывать тип создаваемого значения СоздатьМассив или СоздатьСтруктуру - тогда количество строк кода будет равно строкам JSON:
-
Генератор = Обработки.ГенераторJSONОбъектов.Создать(); ОбъектJSON = Генератор.Конструктор().СоздатьСтруктуру() .ВставитьИЖдатьЗакрытия("customerData").СоздатьСтруктуру() .Вставить("name", "Ivan") .Вставить("surname", "Ivanov") .ВставитьИЖдатьЗакрытия("children").СоздатьМассив() .ДобавитьИЖдатьЗакрытия().СоздатьСтруктуру() .Вставить("name", "Natalya") .ВставитьИЖдатьЗакрытия("pets").СоздатьМассив() .ДобавитьИЖдатьЗакрытия().СоздатьСтруктуру() .Вставить("type", "dog") .Вставить("name", "Sharik") .Вставить("age", 10) .Закрыть() .Закрыть() .Закрыть() .Закрыть() .Закрыть() .ПолучитьОбъект();
Преимущества
- Понятное чтение и понимание того, что сформируется по итогу
- Сокращение времени разработки, использование понятных методов вместо постоянного Новый Структура, Новый Массив и т.д.
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.7.220