К статье
Практический материал

Разработка и Конфигурация · 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".

Порядок действий при создании JSON вручную
  1. 1
    Создайте объект: Новый ЗаписьJSON
  2. 2
    Укажите приёмник: УстановитьСтроку() для строки или ОткрытьФайл() для файла
  3. 3
    Вызовите ЗаписатьНачалоОбъекта() для корневого объекта
  4. 4
    Для каждого поля вызовите ЗаписатьИмяСвойства() и ЗаписатьЗначение()
  5. 5
    Вложенные объекты и массивы открывайте через ЗаписатьНачалоОбъекта() и ЗаписатьНачалоМассива()
  6. 6
    Закройте все уровни и вызовите Закрыть() — он вернёт готовую строку
  7. 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

ЗаписьJSON вручную

Полный контроль над структурой и именами полей. Подходит для произвольных API. Минус — много кода при больших схемах.

ЗаписатьJSON со структурой

Короткий код, автоматическая вложенность. Ограничение — имена ключей должны быть допустимыми идентификаторами, иначе нужно Соответствие.

СериализаторXDTO

Выгружает объект конфигурации целиком без описания полей. Подходит для обмена между базами 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 в браузере или редакторе — внешний инструмент покажет место ошибки точнее, чем сообщение платформы. Для интеграций сверяйте результат не только на синтаксис, но и на соответствие схеме принимающей системы: типы полей, обязательность, вложенность.

Контрольные точки

Как проверить результат

Чтение строки через ПрочитатьJSON
Норма

Строка читается без исключения, возвращается структура или массив

Тревожный признак

Исключение с позицией ошибки — незакрытый объект, лишняя запятая, неверный порядок вызовов

Типы значений в JSON
Норма

Числа без кавычек, булево как true/false, даты в ISO-формате

Тревожный признак

Числа в кавычках, дата в произвольном строковом виде — принимающая система отклонит данные

Кириллица у принимающей стороны
Норма

Русские символы отображаются корректно

Тревожный признак

Кракозябры или ошибки парсинга — несовпадение кодировки, нужен UTF-8

Схема полей
Норма

Все обязательные поля присутствуют, имена совпадают с документацией API

Тревожный признак

Отказ API с ошибкой валидации — пропущено поле или неверное имя ключа

Типичные ошибки и ограничения платформы

Большинство проблем при формировании JSON в 1С связано не с синтаксисом, а с типами данных и логикой сборки. Ниже — то, что чаще всего ломает обмен.

Типичные ошибки
01
Вызов ЗаписатьЗначение без предшествующего ЗаписатьИмяСвойства внутри объекта — платформа выдаёт ошибку или формирует невалидный документ
02
Незакрытый объект или массив: число ЗаписатьНачалоОбъекта/ЗаписатьНачалоМассива не совпадает с числом закрытий — исключение при Закрыть()
03
Запись значения Неопределено без обработки — в JSON появляется null там, где API ждёт число или строку; проверяйте значения перед записью
04
Использование Структуры для ключей с дефисами и точками — синтаксическая ошибка ещё на этапе компиляции модуля; нужно Соответствие
05
Передача ссылки вместо представления: записывается внутренний идентификатор, непонятный внешней системе — записывайте Строка(Ссылка) или УникальныйИдентификатор() явно
06
Формирование гигантской строки в памяти вместо записи в файл — рост потребления памяти и падение сеанса на больших выгрузках

Отдельно стоит упомянуть даты. Платформа сериализует дату в ISO 8601, но без указания часового пояса, если дата не содержит смещения. Если принимающая система интерпретирует время как UTC, а вы отправляете локальное время сервера, возможны сдвиги на несколько часов. Согласуйте с контрагентом по интеграции, в каком часовом поясе передаются даты, и при необходимости приводите их к UTC вручную через УниверсальноеВремя().

Ещё одно ограничение: ЗаписатьJSON не сериализует произвольные типы 1С (таблицы значений, запросы, объекты метаданных) без сериализатора XDTO. Таблицу значений сначала преобразуйте в массив структур — это и быстрее, и предсказуемее по формату.

Маршрут решения

Как выбрать способ

Нужен JSON по точной схеме внешнего API с произвольными именами полейРучная запись через ЗаписьJSON с ЗаписатьИмяСвойства
Данные уже собраны в структуры и массивы, ключи — допустимые идентификаторыГлобальный метод ЗаписатьJSON со структурой
Ключи содержат дефисы, точки или пробелыСоответствие вместо структуры или ручная запись
Нужно выгрузить объект конфигурации целиком для другой базы 1ССериализаторXDTO.ЗаписатьJSON
Объём выгрузки большой — тысячи объектовЗапись напрямую в файл через ОткрытьФайл, без промежуточной строки

Частые вопросы о создании 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 и согласовывайте формат дат и типы полей с принимающей системой.