Разработка и Конфигурация · 14 мин
Как создать JSON в 1С: пошаговая инструкция с примерами
Как создать JSON в 1С: объект ЗаписьJSON, сериализация XDTO, запись структур и массивов, примеры кода, ошибки и проверка результата.
JSON — основной формат обмена данными между 1С и внешними системами: веб-сервисами, сайтами, мобильными приложениями, банками и маркетплейсами. В платформе 1С:Предприятие 8.3 есть два встроенных способа сформировать JSON: низкоуровневый объект ЗаписьJSON и автоматическая сериализация через СериализаторXDTO. Оба работают на встроенном языке без внешних компонент и доступны на клиенте и на сервере.
Выбор способа зависит от задачи. Если нужен полный контроль над структурой документа — именами полей, порядком, типами значений — используйте ЗаписьJSON. Если нужно быстро выгрузить объект конфигурации (справочник, документ) целиком — удобнее сериализация XDTO. Для произвольных структур и массивов подходит связка ЗаписьJSON с методом ЗаписатьЗначениеJSON.
Ниже разобраны оба подхода с готовыми примерами кода, способы проверки результата, типичные ошибки с типами данных и ограничения платформы, о которых нужно знать перед выгрузкой в реальную систему.
Объект ЗаписьJSON: базовый механизм формирования JSON
ЗаписьJSON — это последовательный генератор JSON-документа. Он пишет данные либо в строку в памяти, либо напрямую в файл или поток, что удобно при больших объёмах. Объект создаётся конструктором Новый ЗаписьJSON, после чего задаётся приёмник данных методом УстановитьСтроку() или ОткрытьФайл().
Минимальный пример формирования объекта:
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("Номенклатура");
Запись.ЗаписатьЗначение("Кабель ВВГ 3х2.5");
Запись.ЗаписатьИмяСвойства("Цена");
Запись.ЗаписатьЗначение(152.5);
Запись.ЗаписатьИмяСвойства("Активен");
Запись.ЗаписатьЗначение(Истина);
Запись.ЗаписатьКонецОбъекта();
РезультатJSON = Запись.Закрыть();
Результатом будет строка вида {"Номенклатура":"Кабель ВВГ 3х2.5","Цена":152.5,"Активен":true}. Метод Закрыть() одновременно завершает запись и возвращает сформированную строку, если использовался УстановитьСтроку(). Порядок вызовов строгий: имя свойства всегда предшествует значению, а каждый открытый объект или массив должен быть закрыт.
Платформа сама преобразует типы 1С в типы JSON: строки и даты — в строки JSON, числа — в числа, булево — в true/false, Неопределено по умолчанию пропускается или записывается как null в зависимости от способа записи. Дата сериализуется в формате ISO 8601, например "2026-05-17T10:30:00".
- 1Создайте объект: Новый ЗаписьJSON
- 2Укажите приёмник: УстановитьСтроку() для строки или ОткрытьФайл() для файла
- 3Вызовите ЗаписатьНачалоОбъекта() для корневого объекта
- 4Для каждого поля вызовите ЗаписатьИмяСвойства() и ЗаписатьЗначение()
- 5Вложенные объекты и массивы открывайте через ЗаписатьНачалоОбъекта() и ЗаписатьНачалоМассива()
- 6Закройте все уровни и вызовите Закрыть() — он вернёт готовую строку
- 7Проверьте результат чтением обратно через ЧтениеJSON
Запись массивов и вложенных структур
Массивы формируются парой методов ЗаписатьНачалоМассива() и ЗаписатьКонецМассива(). Между ними каждое значение пишется отдельным вызовом ЗаписатьЗначение() без имени свойства. Массив может содержать объекты — тогда внутри массива для каждого элемента открывается свой объект.
Запись.ЗаписатьИмяСвойства("Товары");
Запись.ЗаписатьНачалоМассива();
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("Код");
Запись.ЗаписатьЗначение(СтрокаТовара.Код);
Запись.ЗаписатьИмяСвойства("Количество");
Запись.ЗаписатьЗначение(СтрокаТовара.Количество);
Запись.ЗаписатьКонецОбъекта();
КонецЦикла;
Запись.ЗаписатьКонецМассива();
Такой подход типичен при выгрузке табличных частей документов: цикл по строкам табличной части превращается в массив однотипных объектов. Следите, чтобы начало и конец массива не попадали внутрь цикла — частая ошибка, приводящая к массиву из одного элемента или к синтаксически неверному JSON.
Быстрый способ: ЗаписатьЗначениеJSON для структур и массивов
Когда данные уже собраны в объекты встроенного языка — Структура, Соответствие, Массив — не нужно вручную перебирать свойства. Метод ЗаписатьЗначениеJSON() сериализует такие коллекции целиком, рекурсивно обходя вложенные элементы.
Данные = Новый Структура;
Данные.Вставить("Организация", "ООО Ромашка");
Данные.Вставить("ИНН", "7701234567");
Позиции = Новый Массив;
Позиции.Добавить(Новый Структура("Товар, Сумма", "Услуга доставки", 1500));
Позиции.Добавить(Новый Структура("Товар, Сумма", "Сборка", 3000));
Данные.Вставить("Позиции", Позиции);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
РезультатJSON = Запись.Закрыть();
Обратите внимание: ЗаписатьJSON — это глобальный метод, принимающий объект записи и значение. Он автоматически формирует корректный документ из структуры любой вложенности. Это самый короткий и надёжный способ для API-интеграций, где схема данных заранее известна и собирается в структуру.
Ограничение способа: имена ключей структуры должны быть допустимыми идентификаторами. Если внешняя система требует ключи с дефисами, пробелами или другими спецсимволами (например, "order-id"), структура не подойдёт — используйте Соответствие, где ключом может быть произвольная строка, либо ручную запись через ЗаписатьИмяСвойства.
Сериализация объектов конфигурации через СериализаторXDTO
Если нужно выгрузить объект базы данных — элемент справочника, документ, запись регистра — вместе со всеми реквизитами, ручное описание каждого поля трудоёмко. Здесь помогает СериализаторXDTO: он преобразует объект 1С в дерево XDTO, а затем в JSON.
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ОбъектТовара = Справочники.Номенклатура.НайтиПоКоду("000000123").ПолучитьОбъект();
СериализаторXDTO.ЗаписатьJSON(Запись, ОбъектТовара);
РезультатJSON = Запись.Закрыть();
Полученный JSON содержит все реквизиты объекта, включая табличные части, ссылочные поля (как UUID) и служебные атрибуты. Это удобно для полной выгрузки, но для интеграций чаще избыточно: внешней системе редко нужны все реквизиты, а структура сериализованного документа фиксирована платформой и не совпадает с контрактом произвольного API.
Поэтому практическое правило: СериализаторXDTO — для обмена между базами 1С и для полных выгрузок, ручная запись или ЗаписатьJSON со структурой — для интеграций с внешними системами, где формат определяет принимающая сторона.
Сравнение способов создания JSON
Полный контроль над структурой и именами полей. Подходит для произвольных API. Минус — много кода при больших схемах.
Короткий код, автоматическая вложенность. Ограничение — имена ключей должны быть допустимыми идентификаторами, иначе нужно Соответствие.
Выгружает объект конфигурации целиком без описания полей. Подходит для обмена между базами 1С, но формат фиксирован и избыточен для внешних API.
Сохранение результата: строка, файл, HTTP-запрос
Полученную строку JSON можно использовать тремя основными способами. Первый — оставить в памяти как строку и передать дальше: в HTTP-запрос, в очередь сообщений, в регистр сведений. Второй — записать в файл напрямую, минуя промежуточную строку, что экономит память при больших выгрузках:
Запись = Новый ЗаписьJSON;
Запись.ОткрытьФайл("C:\Exchange\orders.json", "UTF-8");
// ... запись данных ...
Запись.Закрыть();
Третий способ — отправка в HTTP-сервис. Тело запроса формируется из JSON-строки, а заголовок Content-Type должен быть application/json:
Соединение = Новый HTTPСоединение("api.example.ru", 443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/orders");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.УстановитьТелоИзСтроки(РезультатJSON, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
При записи в файл и отправке по HTTP следите за кодировкой. Стандарт JSON — UTF-8. Если принимающая система выдаёт ошибки распознавания кириллицы, первое, что нужно проверить, — кодировку файла или тела запроса и наличие BOM, который некоторые парсеры не принимают.
Проверка корректности сформированного JSON
Самый надёжный способ проверки встроенными средствами — прочитать сформированную строку обратно через ЧтениеJSON и ПрочитатьJSON. Если документ синтаксически неверен, при чтении возникнет исключение с указанием позиции ошибки.
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(РезультатJSON);
Проверка = ПрочитатьJSON(Чтение); // исключение при ошибке
Чтение.Закрыть();
Дополнительно полезно прогнать строку через любой валидатор JSON в браузере или редакторе — внешний инструмент покажет место ошибки точнее, чем сообщение платформы. Для интеграций сверяйте результат не только на синтаксис, но и на соответствие схеме принимающей системы: типы полей, обязательность, вложенность.
Как проверить результат
Строка читается без исключения, возвращается структура или массив
Исключение с позицией ошибки — незакрытый объект, лишняя запятая, неверный порядок вызовов
Числа без кавычек, булево как true/false, даты в ISO-формате
Числа в кавычках, дата в произвольном строковом виде — принимающая система отклонит данные
Русские символы отображаются корректно
Кракозябры или ошибки парсинга — несовпадение кодировки, нужен UTF-8
Все обязательные поля присутствуют, имена совпадают с документацией API
Отказ API с ошибкой валидации — пропущено поле или неверное имя ключа
Типичные ошибки и ограничения платформы
Большинство проблем при формировании JSON в 1С связано не с синтаксисом, а с типами данных и логикой сборки. Ниже — то, что чаще всего ломает обмен.
Отдельно стоит упомянуть даты. Платформа сериализует дату в ISO 8601, но без указания часового пояса, если дата не содержит смещения. Если принимающая система интерпретирует время как UTC, а вы отправляете локальное время сервера, возможны сдвиги на несколько часов. Согласуйте с контрагентом по интеграции, в каком часовом поясе передаются даты, и при необходимости приводите их к UTC вручную через УниверсальноеВремя().
Ещё одно ограничение: ЗаписатьJSON не сериализует произвольные типы 1С (таблицы значений, запросы, объекты метаданных) без сериализатора XDTO. Таблицу значений сначала преобразуйте в массив структур — это и быстрее, и предсказуемее по формату.
Как выбрать способ
Частые вопросы о создании JSON в 1С
Можно ли сформировать JSON в 1С без написания кода?
Штатных визуальных конструкторов JSON в платформе нет — формирование всегда выполняется программно. В типовых конфигурациях часть интеграционных форматов уже реализована (например, обмены с банками и ЭДО), но для произвольного JSON нужен код на встроенном языке или внешняя обработка.
Как записать в JSON значение null?
Используйте метод ЗаписатьЗначение(Неопределено) при ручной записи — он сформирует null. При сериализации структуры через ЗаписатьJSON значение Неопределено также преобразуется в null. Если API требует отсутствия поля вместо null, не добавляйте ключ в структуру вовсе.
Чем отличается ЗаписатьJSON от ЗаписатьЗначениеJSON?
ЗаписатьJSON — глобальный метод, который принимает объект записи и произвольное значение (структуру, массив, примитив). ЗаписатьЗначение — метод объекта ЗаписьJSON для записи одиночного значения после имени свойства. В современных версиях платформы для сериализации коллекций используют первый, для пошаговой записи — второй.
Почему дата в JSON выгружается не в том виде, который ждёт API?
Платформа сериализует дату в ISO 8601 без часового пояса. Если API ждёт Unix-timestamp или другой формат, преобразуйте дату вручную: Формат(Дата, "ДФ=yyyy-MM-dd") для строки или вычислите секунды от начала эпохи для timestamp. Формат всегда согласовывайте с документацией принимающей системы.
Как создать JSON на мобильной платформе или в тонком клиенте?
Объекты ЗаписьJSON и ЧтениеJSON доступны на тонком клиенте, веб-клиенте и мобильной платформе. Ограничение касается только записи в файл: на мобильном устройстве путь должен находиться в доступном приложению каталоге, а в веб-клиенте прямая запись на диск невозможна — строку нужно передать на сервер.
Что делать, если JSON получается слишком большим?
Записывайте напрямую в файл через ОткрытьФайл() вместо накопления строки в памяти. При отправке по HTTP разбивайте выгрузку на пакеты — по несколько сотен объектов за запрос. Если протокол позволяет, рассмотрите потоковый формат NDJSON, где каждый объект пишется отдельной строкой.
Что важно запомнить
JSON в 1С создаётся объектом ЗаписьJSON: вручную через пары «имя–значение», пакетно через ЗаписатьJSON со структурой или соответствием, для объектов конфигурации — через СериализаторXDTO. Всегда закрывайте все уровни, проверяйте результат обратным чтением через ПрочитатьJSON, используйте кодировку UTF-8 и согласовывайте формат дат и типы полей с принимающей системой.