Как в 1С построить структуру JSON с массивами и вложенными объектами?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В современной разработке на платформе 1С:Предприятие 8 обмен данными через формат JSON стал промышленным стандартом. Часто возникают ситуации, когда внешняя система (API) требует строго определенной структуры, где корневым элементом является не объект (в фигурных скобках {}), а массив (в квадратных скобках []), внутри которого находятся вложенные объекты. Разберем подробно, как реализовать такую задачу программно.

Основы формирования структуры: Массивы и Объекты

Для того чтобы получить на выходе корректный JSON, нам необходимо сначала подготовить данные в памяти 1С, используя соответствующие коллекции. Правило преобразования типов выглядит следующим образом:

  1. Коллекция Массив в 1С превращается в массив [] в JSON.
  2. Коллекции Структура или Соответствие превращаются в объект {} в 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);
КорневойМассив.Добавить(ДанныеВторогоВрача);

Сериализация в строку JSON

После того как дерево объектов в памяти 1С построено, его необходимо превратить в текстовую строку. Для этого мы используем объекты ЗаписьJSON и системную функцию ЗаписатьJSON.


Запись = Новый ЗаписьJSON;
// Указываем параметры записи, если хотим красивый отступ (человекочитаемый вид)
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ");
Запись.УстановитьСтроку(ПараметрыЗаписи);

// Основное действие: превращаем структуру 1С в текст
ЗаписатьJSON(Запись, КорневойМассив);

РезультатJSON = Запись.Закрыть();
// Теперь переменная РезультатJSON содержит готовую строку для отправки в API

Выбор между Структурой и Соответствием

Выясним причину, почему иногда вместо Структуры лучше использовать Соответствие. Это важный технический нюанс:

  1. Структура: Идеально подходит, если ключи JSON (имена полей) соответствуют правилам именования переменных в 1С. Например, ключ client_id допустим, а ключ client-id (с дефисом) или ключ, начинающийся с цифры 1_key, вызовет ошибку при создании структуры.
  2. Соответствие: Позволяет использовать в качестве ключа абсолютно любую строку. Если ваше API требует ключи со спецсимволами, пробелами или знаками пунктуации, используйте Новый Соответствие. При сериализации оно превратится в такой же объект {}.

Важные замечания по типам данных

Проанализируем, как 1С обрабатывает пустые значения и специальные типы при записи в JSON:

Альтернативный метод: Ручное формирование строки

В редких случаях, когда структура статична и крайне проста, разработчики прибегают к «ручному» рисованию строки с использованием функции СтрШаблон. Однако мы рекомендуем использовать штатные средства сериализации, так как они автоматически экранируют спецсимволы в строках (например, кавычки внутри текста), что защищает ваш код от ошибок формата.

Использование связки Массив + Структура является наиболее надежным и гибким способом построения JSON в 1С, позволяющим создавать дерево данных любой сложности и вложенности.

← На главную