В современной разработке на платформе 1С:Предприятие 8 обмен данными через формат JSON стал промышленным стандартом. Часто возникают ситуации, когда внешняя система (API) требует строго определенной структуры, где корневым элементом является не объект (в фигурных скобках {}), а массив (в квадратных скобках []), внутри которого находятся вложенные объекты. Разберем подробно, как реализовать такую задачу программно.
Для того чтобы получить на выходе корректный JSON, нам необходимо сначала подготовить данные в памяти 1С, используя соответствующие коллекции. Правило преобразования типов выглядит следующим образом:
Массив в 1С превращается в массив [] в JSON.Структура или Соответствие превращаются в объект {} в JSON.Проанализируем задачу автора: нам нужно создать массив, содержащий объекты. Внутри каждого объекта должно быть поле clin, которое само по себе является объектом. Это означает, что нам нужно реализовать «матрешку» из коллекций.
Рассмотрим по шагам, как собрать структуру из примера, где есть электронная почта, телефон и вложенный идентификатор клиента.
Шаг 1: Создание корневого массива.
Поскольку наш JSON начинается с квадратной скобки, первым делом мы инициализируем массив.
КорневойМассив = Новый Массив;
Шаг 2: Наполнение массива объектами.
Для каждого элемента списка мы создаем Структуру. Если нам нужно передать вложенный объект (как clin в примере), мы создаем еще одну структуру внутри первой.
// Формируем первый элемент
ДанныеПервогоВрача = Новый Структура;
ДанныеПервогоВрача.Вставить("email", "");
ДанныеПервогоВрача.Вставить("phone", "+79998889988");
// Создаем вложенный объект для ключа "clin"
ВложенныйОбъектКлин = Новый Структура;
ВложенныйОбъектКлин.Вставить("client_id", "001");
// Добавляем вложенную структуру в основную
ДанныеПервогоВрача.Вставить("clin", ВложенныйОбъектКлин);
// Добавляем готовый объект в массив
КорневойМассив.Добавить(ДанныеПервогоВрача);
Шаг 3: Добавление второго элемента.
Повторим процесс для второго врача, чтобы массив содержал несколько элементов.
ДанныеВторогоВрача = Новый Структура;
ДанныеВторогоВрача.Вставить("email", "another_doctor@gmail.com");
ДанныеВторогоВрача.Вставить("phone", "");
ВложенныйОбъектКлин2 = Новый Структура;
ВложенныйОбъектКлин2.Вставить("client_id", "001");
ДанныеВторогоВрача.Вставить("clin", ВложенныйОбъектКлин2);
КорневойМассив.Добавить(ДанныеВторогоВрача);
После того как дерево объектов в памяти 1С построено, его необходимо превратить в текстовую строку. Для этого мы используем объекты ЗаписьJSON и системную функцию ЗаписатьJSON.
Запись = Новый ЗаписьJSON;
// Указываем параметры записи, если хотим красивый отступ (человекочитаемый вид)
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ");
Запись.УстановитьСтроку(ПараметрыЗаписи);
// Основное действие: превращаем структуру 1С в текст
ЗаписатьJSON(Запись, КорневойМассив);
РезультатJSON = Запись.Закрыть();
// Теперь переменная РезультатJSON содержит готовую строку для отправки в API
Выясним причину, почему иногда вместо Структуры лучше использовать Соответствие. Это важный технический нюанс:
client_id допустим, а ключ client-id (с дефисом) или ключ, начинающийся с цифры 1_key, вызовет ошибку при создании структуры.Новый Соответствие. При сериализации оно превратится в такой же объект {}.Проанализируем, как 1С обрабатывает пустые значения и специальные типы при записи в JSON:
Неопределено или Null, в JSON оно превратится в null. Если API ожидает пустую строку, обязательно инициализируйте поле как "".Истина и Ложь автоматически станут true и false соответственно.В редких случаях, когда структура статична и крайне проста, разработчики прибегают к «ручному» рисованию строки с использованием функции СтрШаблон. Однако мы рекомендуем использовать штатные средства сериализации, так как они автоматически экранируют спецсимволы в строках (например, кавычки внутри текста), что защищает ваш код от ошибок формата.
Использование связки Массив + Структура является наиболее надежным и гибким способом построения JSON в 1С, позволяющим создавать дерево данных любой сложности и вложенности.