Разработка и Конфигурация · 12 мин
Как работать с JSON в 1С
Практическое руководство по работе с JSON в 1С: объекты ЧтениеJSON и ЗаписьJSON, сериализация, обмен с веб-сервисами, типичные ошибки и примеры кода.
JSON стал стандартным форматом обмена данными между 1С и внешними системами: веб-сервисами, мобильными приложениями, сайтами, банковскими API и маркетплейсами. Платформа 1С:Предприятие 8.3 включает встроенные средства для чтения и записи JSON без сторонних библиотек — объекты ЧтениеJSON и ЗаписьJSON, а также глобальные функции ПрочитатьJSON и ЗаписатьJSON.
Основная сложность для разработчика — не сам синтаксис, а правильный выбор способа разбора: потоковое чтение подходит для больших файлов, а чтение в структуру или соответствие удобнее для небольших документов. Ошибка в выборе подхода приводит либо к избыточному расходу памяти, либо к громоздкому коду, который трудно поддерживать.
Ниже разобраны оба подхода с примерами кода, сериализация объектов 1С, обмен по HTTP, контроль ошибок и типичные проблемы с типами данных, кодировкой и датами.
Какие средства работы с JSON есть в платформе 1С
Платформа предоставляет два уровня инструментов. Первый — низкоуровневые объекты ЧтениеJSON и ЗаписьJSON, которые работают последовательно: читают или пишут документ токен за токеном (начало объекта, имя свойства, значение, конец массива и так далее). Этот способ даёт полный контроль и экономит память на больших файлах.
Второй уровень — функции ПрочитатьJSON() и ЗаписатьJSON(), которые выполняют всю операцию одним вызовом. ПрочитатьJSON преобразует текст JSON в структуру, соответствие или массив, а ЗаписатьJSON сериализует значения встроенных типов 1С в строку JSON.
Дополнительно существуют методы ПрочитатьJSONВЗначение и ЗаписатьJSONЗначение для сериализации сложных объектов (например, таблиц значений) с сохранением типов, но они ориентированы на внутренний обмен между базами 1С и не подходят для интеграции с внешними системами.
Чтение JSON в структуру или соответствие
Самый частый сценарий — получить строку JSON из файла или ответа веб-сервиса и разобрать её в объект 1С. Для этого создаётся объект ЧтениеJSON, ему передаётся строка или поток, после чего вызывается ПрочитатьJSON:
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение, Истина); // Истина — читать в соответствие
Чтение.Закрыть();
Артикул = Данные["items"][0]["sku"];
Второй параметр ПрочитатьJSON определяет тип результата. При значении Истина объекты JSON преобразуются в соответствие — это безопасный вариант, потому что ключи JSON могут содержать символы, недопустимые для имён свойств структуры (дефисы, пробелы, кириллицу вперемешку с цифрами в начале). При значении Ложь результат будет структурой, и обращение к свойствам пишется короче через точку, но при недопустимом имени ключа возникнет ошибка.
Если заранее известно, что в JSON есть поля с датами в формате ISO (например, "2026-05-17T10:30:00"), их можно автоматически преобразовать в тип Дата, перечислив имена свойств третьим параметром:
Данные = ПрочитатьJSON(Чтение, Истина, "dateCreated,dateModified");
Потоковое чтение больших JSON-документов
Когда файл занимает десятки или сотни мегабайт, загрузка его целиком в соответствие может исчерпать доступную память сервера или клиента. В этом случае используется последовательный обход через методы Прочитать() и ТипТекущегоЗначения:
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл("C:\exchange\catalog.json");
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.ИмяСвойства Тогда
ИмяПоля = Чтение.ТекущееЗначение;
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();
Потоковый подход требует аккуратного отслеживания вложенности: нужно самостоятельно считать открытые объекты и массивы, чтобы понимать, в каком контексте находится текущее значение. Для файлов с повторяющейся структурой (массив однотипных объектов) удобен приём: дочитать до начала очередного элемента массива, затем вызвать ПрочитатьJSON только для этого элемента — так сочетаются экономия памяти и простота разбора.
Сравнение подходов к чтению
Подходит для документов до нескольких мегабайт; код короткий, но весь документ загружается в память.
Подходит для больших файлов и выгрузок; память расходуется минимально, но код сложнее и требует контроля вложенности.
Только для обмена между базами 1С с сохранением типов; внешние системы такой формат не поймут.
Запись и формирование JSON из 1С
Для формирования JSON используется объект ЗаписьJSON и функция ЗаписатьJSON. В простейшем случае сериализуется готовая структура или соответствие:
Данные = Новый Структура;
Данные.Вставить("number", "00125");
Данные.Вставить("date", Формат(ТекущаяДатаСеанса(), "ДФ=yyyy-MM-dd"));
Данные.Вставить("amount", 15420.50);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
СтрокаJSON = Запись.Закрыть();
Автоматически сериализуются строки, числа, булевы значения, структуры, соответствия, массивы и значение Неопределено (превращается в null). Даты и ссылочные типы напрямую не сериализуются — дату нужно заранее преобразовать в строку, а ссылку, например, в строковое представление уникального идентификатора через Строка(Ссылка.УникальныйИдентификатор()).
Для точного контроля над структурой результата (порядок полей, обёртки, массивы внутри массивов) применяется потоковая запись методами ЗаписатьНачалоОбъекта, ЗаписатьИмяСвойства, ЗаписатьЗначение, ЗаписатьНачалоМассива и парных им методов завершения.
- 1Соберите данные в структуру или соответствие, заранее преобразовав даты и ссылки в строки
- 2Создайте объект ЗаписьJSON и вызовите УстановитьСтроку() или ОткрытьФайл()
- 3Вызовите ЗаписатьJSON(Запись, Данные) или сформируйте документ потоковыми методами
- 4Вызовите Закрыть() и получите готовую строку или проверьте файл
- 5Проверьте результат любым онлайн-валидатором JSON или повторным чтением через ПрочитатьJSON
Обмен JSON с внешними веб-сервисами
Типовая интеграция выглядит так: 1С формирует JSON, отправляет его в теле HTTP-запроса и разбирает ответ. Используются объекты HTTPСоединение и HTTPЗапрос:
Соединение = Новый HTTPСоединение("api.example.ru", 443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/orders");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Результат = ПрочитатьJSON(Чтение, Истина);
Чтение.Закрыть();
КонецЕсли;
Обязательно проверяйте код состояния ответа до разбора тела: при ошибках 4xx и 5xx тело часто содержит HTML-страницу ошибки или JSON другой структуры, и попытка прочитать ожидаемые поля приведёт к непонятной ошибке в другом месте кода. Также явно указывайте кодировку UTF-8 при установке и чтении тела — кириллица без указания кодировки часто превращается в нечитаемые символы.
Типичные проблемы: даты, числа, null и кодировка
В JSON нет типа «дата», поэтому каждый сервис передаёт даты по-своему: строкой ISO 8601, числом Unix-времени или собственным форматом. Перед сравнением или записью в реквизит 1С преобразуйте значение явно. Для Unix-времени используется вычисление: Дата = Дата(1970,1,1,1,0,0) + ЗначениеИзJSON с учётом часового пояса.
Числа с плавающей точкой в JSON могут терять точность при преобразовании, поэтому денежные суммы лучше передавать либо строками, либо в копейках целыми числами, если формат обмена вы проектируете сами. Значение null из JSON превращается в Неопределено, и обратная сериализация Неопределено даёт null — учитывайте это при проверках заполненности.
Ещё один источник сбоев — BOM (сигнатура порядка байтов) в начале файла, сохранённого сторонними программами. Если ПрочитатьJSON падает с ошибкой на внешне корректном файле, проверьте первые байты и при необходимости прочитайте файл через ЧтениеТекста с явным указанием кодировки.
Проверка результата и отладка
После чтения JSON полезно сразу проверить наличие обязательных полей. Для соответствия используйте метод Получить("имя") — он вернёт Неопределено вместо ошибки, если ключа нет. Для структуры есть метод Свойство("имя", НайденноеЗначение), который возвращает булево и позволяет безопасно извлечь значение.
Для отладки сформированного JSON выводите строку в журнал регистрации или сообщение перед отправкой и проверяйте её валидатором. Обратный приём тоже работает: сразу после ЗаписатьJSON прочитайте строку обратно через ПрочитатьJSON — если чтение прошло без ошибки и поля на месте, документ сформирован корректно.
Как проверить результат
Все обязательные поля присутствуют и имеют ожидаемый тип
Поля отсутствуют, равны Неопределено или содержат строку вместо числа
Строка повторно читается ПрочитатьJSON без ошибок, кириллица отображается корректно
Ошибка парсинга, лишние экранирования, искажённые символы
Код состояния 200 или 201, тело в ожидаемом формате
Код 4xx/5xx, HTML-страница вместо JSON, пустое тело
Часто задаваемые вопросы
Что выбрать: структуру или соответствие при чтении JSON?
Если вы полностью контролируете формат и уверены, что все ключи — допустимые идентификаторы, удобнее структура: обращение через точку короче. Для данных из внешних систем безопаснее соответствие, потому что ключи могут содержать дефисы, пробелы и другие символы, недопустимые в именах свойств структуры.
Как передать дату из 1С в JSON?
Преобразуйте дату в строку формата ISO 8601, например через Формат(Дата, "ДФ=yyyy-MM-ddTHH:mm:ss"), либо передайте числом Unix-время. Автоматическая сериализация типа Дата функцией ЗаписатьJSON не поддерживается — значение нужно подготовить заранее.
Почему ПрочитатьJSON выдаёт ошибку на корректном с виду файле?
Частые причины: BOM в начале файла, неверная кодировка при чтении, недопустимые управляющие символы в строках или фактическое нарушение синтаксиса (лишняя запятая, незакрытая скобка). Прочитайте файл через ЧтениеТекста с указанием UTF-8 и проверьте содержимое валидатором.
Как прочитать большой JSON-файл, не загружая его целиком в память?
Используйте потоковое чтение: откройте файл методом ОткрытьФайл объекта ЧтениеJSON и обходите документ циклом Прочитать(). Для массивов однотипных объектов удобно дочитывать до начала очередного элемента и разбирать только его через ПрочитатьJSON.
Можно ли сериализовать ссылку на объект 1С в JSON?
Напрямую — нет. Обычно передают строковое представление уникального идентификатора: Строка(Ссылка.УникальныйИдентификатор()). При обратной загрузке ссылку восстанавливают через ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)) у менеджера соответствующего объекта.
Чем ПрочитатьJSONВЗначение отличается от ПрочитатьJSON?
ПрочитатьJSONВЗначение работает со специальным внутренним форматом сериализации 1С и сохраняет типы платформы, включая таблицы значений. Он предназначен для обмена между базами 1С и не подходит для интеграции с внешними системами, которые ожидают стандартный JSON.
Что важно запомнить
Чтение JSON выполняется через ЧтениеJSON + ПрочитатьJSON (в соответствие для внешних данных), запись — через ЗаписьJSON + ЗаписатьJSON с предварительным преобразованием дат и ссылок в строки. Для больших файлов применяйте потоковое чтение, при обмене по HTTP всегда проверяйте код состояния и указывайте кодировку UTF-8.