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

Разработка и Конфигурация · 12 мин

Как разобрать JSON в 1С: практическое руководство

Как разобрать JSON в 1С: ЧтениеJSON, ПрочитатьJSON и СериализаторXDTO. Примеры кода, проверка результата, типичные ошибки и ответы на вопросы.

JSON — основной формат обмена данными между 1С и внешними системами: веб-сервисами, сайтами, мобильными приложениями, банковскими API. Задача «разобрать JSON» возникает при загрузке курсов валют, получении заказов с маркетплейсов, интеграции с CRM и десятках других сценариев. В платформе 1С есть три рабочих способа разбора: потоковое чтение через ЧтениеJSON, разбор в структуру через ПрочитатьJSON и разбор через СериализаторXDTO для регистров сведений и простых типов.

Выбор способа зависит от объёма данных и структуры ответа. Для небольших ответов удобнее ПрочитатьJSON — он сразу возвращает структуру или соответствие. Для больших файлов, которые нежелательно целиком загружать в память, подходит потоковое ЧтениеJSON. Ниже — рабочие примеры кода, проверка результата и типичные ошибки, с которыми сталкиваются разработчики.

Все примеры написаны для управляемых форм и работают на актуальных версиях платформы 8.3. Код можно выполнять как на сервере, так и на клиенте (в толстом клиенте), если иное не оговорено.

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

Платформа 1С:Предприятие 8.3 предоставляет встроенные средства работы с JSON без подключения внешних компонентов. Основных объекта три, и каждый решает свою задачу.

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

ЧтениеJSON — объект потокового чтения. Он последовательно проходит по элементам документа и позволяет обрабатывать данные по мере чтения, не загружая весь документ в память. Полезен для файлов в десятки и сотни мегабайт.

Сравнение способов разбора

ПрочитатьJSON

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

ЧтениеJSON (потоково)

Для больших файлов и случаев, когда нужно контролировать каждый элемент. Код сложнее, но память расходуется экономно.

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

Для обмена простыми типами 1С (даты, ссылки, UUID) в JSON между базами 1С. Не подходит для произвольных внешних API.

Быстрый разбор через ПрочитатьJSON

Типовая задача: получен ответ от HTTP-сервиса в виде строки, нужно извлечь значения полей. Минимальный код выглядит так:

Чтение = Новый ЧтениеJSON;

Чтение.УстановитьСтроку(СтрокаОтвета);

Данные = ПрочитатьJSON(Чтение, Ложь); // Ложь — читаем в Структуру

Чтение.Закрыть();

ЗаказНомер = Данные.НомерЗаказа;

Для Каждого СтрокаТовара Из Данные.Товары Цикл

// обработка каждой строки массива

КонецЦикла;

Второй параметр ПрочитатьВСоответствие определяет тип результата. Значение Ложь возвращает Структуру — обращение к полям идёт через точку, что удобно и читаемо. Значение Истина возвращает Соответствие — обращение через квадратные скобки Данные["номер заказа"].

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

Обработка массивов и вложенных объектов

Массив JSON превращается в объект Массив, вложенный объект — во вложенную структуру. Перед обращением к вложенному полю проверяйте его существование через Свойство(), иначе при отсутствии поля получите ошибку «Поле объекта не обнаружено»:

Если Данные.Свойство("Контрагент") Тогда

ИНН = Данные.Контрагент.ИНН;

Иначе

ИНН = "";

КонецЕсли;

Значения null в JSON преобразуются в Неопределено. Булевы значения true/false — в Булево, числа — в Число. Даты автоматически не распознаются: строка "2026-01-15T10:30:00" останется строкой, её нужно преобразовывать вручную или через параметры чтения.

Потоковый разбор через ЧтениеJSON

Когда файл велик или структура заранее неизвестна, используют последовательный обход. Метод Прочитать() переходит к следующему элементу, а свойство ТипТекущегоЗначения сообщает, что именно встретилось:

Чтение = Новый ЧтениеJSON;

Чтение.ОткрытьФайл(ПутьКФайлу);

Пока Чтение.Прочитать() Цикл

Если Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.ИмяСвойства Тогда

ИмяПоля = Чтение.ТекущееЗначение;

ИначеЕсли Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Строка Тогда

Значение = Чтение.ТекущееЗначение;

КонецЕсли;

КонецЦикла;

Чтение.Закрыть();

Такой подход требует больше кода, но даёт полный контроль: можно пропускать ненужные ветки (Пропустить()), обрабатывать элементы массива по одному и сразу записывать их в базу, не накапливая в памяти. Это единственный разумный вариант для файлов, сопоставимых по размеру с доступной оперативной памятью сервера.

Порядок разбора JSON из HTTP-ответа
  1. 1
    Выполните HTTP-запрос и получите тело ответа строкой через ПолучитьТелоКакСтроку()
  2. 2
    Проверьте код ответа: разбирайте тело только при успешном статусе (обычно 200)
  3. 3
    Создайте ЧтениеJSON и установите строку ответа
  4. 4
    Вызовите ПрочитатьJSON с нужным значением ПрочитатьВСоответствие
  5. 5
    Проверьте наличие обязательных полей через Свойство() перед обращением к ним
  6. 6
    Закройте объект чтения и обработайте данные

Получение JSON: откуда берутся данные

Перед разбором JSON нужно получить. Три типовых источника: HTTP-запрос к внешнему API, чтение файла с диска и строка, переданная из другой процедуры или из формы.

Для HTTP используется объект HTTPСоединение и HTTPЗапрос. Тело ответа получают методом ПолучитьТелоКакСтроку(). Для файла достаточно ЧтениеJSON.ОткрытьФайл() — тогда не нужно читать файл целиком в строку. Для строки из другого модуля — УстановитьСтроку().

Обратите внимание на кодировку. Метод ПолучитьТелоКакСтроку() по умолчанию определяет кодировку из заголовков ответа, но некоторые сервисы отдают неверные заголовки. Если в результате видны «кракозябры» вместо кириллицы, укажите кодировку явно: ПолучитьТелоКакСтроку(КодировкаТекста.UTF8).

Преобразование дат и особые типы

Слабое место стандартного разбора — даты. JSON не имеет типа «дата», поэтому сервисы передают их строками в разных форматах: ISO 8601, Unix timestamp, произвольные строки вида «15.01.2026».

У ПрочитатьJSON есть параметры ИменаСвойствСоЗначениямиДата и ФорматДатыJSON, которые позволяют указать, какие поля преобразовать в дату автоматически:

Данные = ПрочитатьJSON(Чтение, Ложь, "ДатаЗаказа,ДатаОтгрузки", ФорматДатыJSON.ISO);

Если формат нестандартный, проще прочитать значение строкой и преобразовать вручную. Для Unix timestamp (секунды с 01.01.1970) используйте сложение: Дата = Дата(1970,1,1) + Число(СтрокаTimestamp), учитывая смещение часового пояса, если оно важно.

Типичные ошибки при разборе JSON в 1С
01
Обращение к полю без проверки Свойство() — при изменении формата ответа код падает с «Поле объекта не обнаружено»
02
Использование Структуры для полей с дефисами и пробелами в именах — невозможно обратиться через точку
03
Ожидание, что дата распознается автоматически — строка остаётся строкой, сравнение дат работает неверно
04
Разбор огромного файла через ПрочитатьJSON целиком — переполнение памяти на сервере
05
Игнорирование кода HTTP-ответа — в тело разбора попадает HTML-страница ошибки вместо JSON

Проверка результата и отладка

После разбора убедитесь, что данные соответствуют ожиданиям. Минимальный набор проверок: тип верхнего уровня (структура или массив), наличие обязательных полей, корректность типов значений.

Для отладки удобно выводить полученную структуру в сообщение или журнал регистрации. Быстрый способ посмотреть содержимое — сериализовать обратно через ЗаписьJSON или пройтись циклом по свойствам:

Для Каждого КлючИЗначение Из Данные Цикл

Сообщить(КлючИЗначение.Ключ + " = " + КлючИЗначение.Значение);

КонецЦикла;

Если исходная строка не парсится вообще, проверьте её валидность: JSON строг к синтаксису. Частые проблемы — лишняя запятая перед закрывающей скобкой, одинарные кавычки вместо двойных, неэкранированные спецсимволы, BOM в начале файла. Ошибка «Недопустимый символ» при чтении почти всегда означает, что в строке не JSON, а HTML-страница ошибки или текст с BOM.

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

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

Тип результата ПрочитатьJSON
Норма

Структура или Соответствие для объекта, Массив для списка

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

Неопределено или примитивное значение там, где ожидался объект

Кириллица в строковых значениях
Норма

Текст читаемый

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

Кракозябры — неверная кодировка при получении тела ответа

Поля с датами
Норма

Тип Дата при указанных ИменаСвойствСоЗначениямиДата, иначе строка, преобразованная вручную

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

Строка используется в сравнениях как дата

Числовые поля
Норма

Тип Число

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

Строка с числом — внешний сервис отдал число в кавычках, нужно преобразование

Разбор через СериализаторXDTO и когда он нужен

Третий способ — СериализаторXDTO.ПрочитатьJSON. Он предназначен для обмена данными между базами 1С: сохраняет типы платформы, включая ссылки, даты и значения с типом «Дата». Если JSON сформирован другой базой 1С через СериализаторXDTO.ЗаписатьJSON, то и читать его нужно сериализатором — обычный ПрочитатьJSON вернёт структуру со служебными полями типа #value и #type.

Для внешних API этот способ не подходит: он ожидает строгий формат сериализации платформы и упадёт на произвольном JSON от стороннего сервиса.

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

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

JSON пришёл от внешнего API, размер до нескольких мегабайтИспользуйте ПрочитатьJSON с ПрочитатьВСоответствие = Ложь
Имена полей содержат дефисы, пробелы или начинаются с цифрыЧитайте в Соответствие (параметр Истина) и обращайтесь через квадратные скобки
Файл очень большой или нужно обрабатывать элементы по одномуИспользуйте потоковое ЧтениеJSON с циклом Прочитать()
JSON сформирован другой базой 1С через СериализаторXDTOЧитайте через СериализаторXDTO.ПрочитатьJSON

FAQ: частые вопросы о разборе JSON в 1С

Что делать, если ПрочитатьJSON выдаёт ошибку «Недопустимый символ»?

Почти всегда это означает, что в строке не JSON. Проверьте начало строки: там может быть HTML-страница ошибки сервера, пустой ответ или BOM-символ в начале файла. Выведите первые 200 символов строки в сообщение перед разбором — это сразу покажет, что реально пришло.

Как разобрать JSON, если имена полей написаны с дефисом, например «order-id»?

Используйте ПрочитатьJSON с параметром ПрочитатьВСоответствие = Истина. Результатом будет Соответствие, и обращение к полю будет выглядеть как Данные["order-id"]. Структура такие имена через точку не поддерживает.

Почему дата из JSON сравнивается неправильно?

Стандартный разбор не преобразует даты автоматически — значение остаётся строкой, а строковое сравнение дат работает некорректно. Укажите имена полей с датами в параметрах ПрочитатьJSON или преобразуйте строку в тип Дата вручную после разбора.

Можно ли разобрать JSON на клиенте в тонком клиенте?

Да, ЧтениеJSON и ПрочитатьJSON доступны на тонком клиенте. Ограничение касается источника данных: HTTP-запросы с клиента возможны, но чаще запрос выполняют на сервере, а на клиент передают уже готовую строку или разобранную структуру.

Как обработать JSON, где на верхнем уровне массив, а не объект?

ПрочитатьJSON корректно возвращает Массив в этом случае. Проверьте тип результата через ТипЗнч(Данные) = Тип("Массив") и обходите его циклом Для Каждого. Не пытайтесь обращаться к свойствам массива как к структуре.

Чем заменить сторонние библиотеки для работы с JSON в 1С?

Ничем заменять не нужно: встроенных средств платформы (ЧтениеJSON, ПрочитатьJSON, ЗаписьJSON, ЗаписатьJSON) достаточно для всех типовых задач интеграции. Внешние компоненты требуются только в экзотических случаях, например для работы с JSONPath-запросами.

Итог

Что важно запомнить

Для большинства задач используйте ПрочитатьJSON: Ложь — в структуру, Истина — в соответствие для полей с нестандартными именами. Большие файлы читайте потоково через ЧтениеJSON. Всегда проверяйте наличие полей через Свойство(), помните, что даты приходят строками, и оборачивайте разбор внешних данных в Попытка/Исключение с логированием.