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

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

Как распарсить JSON в 1С: пошаговое руководство с примерами кода

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

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

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

Ниже разобраны рабочие способы парсинга: от простейшего чтения в структуру до обработки массивов, вложенных объектов и дат. Каждый пример можно скопировать и адаптировать под свой ответ API. Отдельно показано, как проверить результат и какие ошибки встречаются чаще всего.

Какие встроенные средства чтения JSON есть в платформе

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

Второй уровень — потоковое чтение через объект ЧтениеJSON с методами Прочитать() и проверкой типа текущего значения. Такой подход нужен, когда документ очень большой и загружать его в память целиком нерационально, либо когда структура заранее неизвестна и её нужно исследовать «на лету».

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

Базовый пример: ПрочитатьJSON в структуру

Минимальный рабочий код состоит из трёх шагов: создать объект ЧтениеJSON, установить в него строку с данными, вызвать ПрочитатьJSON. Результат — соответствие (по умолчанию) или структура, если передать второй параметр.

bsl
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение, Истина); // Истина — читать в Соответствие
Чтение.Закрыть();

Имя = Данные["name"];
Цена = Данные["price"];

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

Выбор между структурой и соответствием — не только вкусовщина. Соответствие безопаснее, когда имена полей могут содержать символы, недопустимые для идентификаторов 1С (дефисы, пробелы, цифры в начале), или когда имя поля совпадает с зарезервированным словом. Структура удобнее для чтения кода, но требует «чистых» имён полей.

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

Массив JSON преобразуется в объект Массив встроенного языка, а вложенный объект — во вложенное соответствие или структуру. Обход выполняется обычным циклом Для Каждого. Типичный пример — разбор списка заказов из ответа API маркетплейса.

bsl
Для Каждого Заказ Из Данные["orders"] Цикл
    НомерЗаказа = Заказ["orderId"];
    Для Каждого Позиция Из Заказ["items"] Цикл
        Артикул = Позиция["sku"];
        Количество = Позиция["qty"];
    КонецЦикла;
КонецЦикла;

Главная ловушка при работе с массивами — отсутствие самого массива в ответе. Многие API при пустом результате не возвращают ключ вовсе, а при одном элементе иногда возвращают объект вместо массива. Перед циклом проверяйте, что значение существует и имеет нужный тип.

Надёжный шаблон проверки выглядит так: сначала убедиться, что ключ есть (Данные.Свойство("orders") для структуры или Данные["orders"] <> Неопределено для соответствия), затем проверить тип через ТипЗнч(Значение) = Тип("Массив"). Только после этого запускать цикл. Это избавляет от большинства падений обмена в неурочное время.

Даты, числа и null: как не потерять данные при преобразовании

JSON не имеет отдельного типа «дата» — даты передаются строками, чаще всего в формате ISO 8601 (2026-05-17T10:30:00). По умолчанию ПрочитатьJSON вернёт такую дату обычной строкой, и сравнение или запись в реквизит типа «Дата» вызовет ошибку преобразования.

Решение — третий параметр процедуры: список свойств, которые нужно читать как дату, и формат. Например: ПрочитатьJSON(Чтение, Истина, "date,createdAt", ФорматДатыJSON.ISO). Тогда указанные поля сразу станут значениями типа «Дата» и их можно записывать в документы без дополнительного кода.

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

Типичные ошибки
01
Чтение даты как строки и попытка записать её в реквизит типа Дата — ошибка преобразования, обмен падает на первом же документе
02
Обращение к полю без проверки его существования — при пустом ответе API получаете исключение вместо пустой выборки
03
Чтение в Структуру, когда в JSON есть ключи с дефисом (например, order-id) — синтаксическая ошибка доступа к свойству
04
Игнорирование кодировки: строка JSON прочитана из HTTP-ответа в неверной кодировке, кириллица превращается в кракозябры

Потоковое чтение больших JSON-документов

Если ответ внешней системы занимает десятки мегабайт (выгрузка каталога, история операций за длительный период), загрузка всего документа в память одним вызовом может привести к замедлению или переполнению памяти сервера. В этом случае используют последовательное чтение через ЧтениеJSON.

bsl
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл(ПутьКФайлу);
Пока Чтение.Прочитать() Цикл
    Если Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.ИмяСвойства Тогда
        ИмяПоля = Чтение.ТекущееЗначение;
    КонецЕсли;
КонецЦикла;
Чтение.Закрыть();

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

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

Как выбрать способ чтения

Ответ API небольшой, структура известнаИспользуйте ПрочитатьJSON целиком в Соответствие
В JSON есть даты в ISO-форматеПередайте список полей дат и ФорматДатыJSON.ISO третьим параметром
Файл занимает десятки мегабайтЧитайте потоково через ЧтениеJSON, обрабатывая элементы по одному
Имена полей содержат дефисы или начинаются с цифрыЧитайте в Соответствие, а не в Структуру

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

После разбора полезно убедиться, что данные действительно получены в ожидаемом виде. Самый быстрый способ при отладке — вывести тип и содержимое через Сообщить() или посмотреть переменную в табло отладчика. Для соответствия в табло видны все ключи, что позволяет сверить имена полей с фактическим ответом.

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

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

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

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

Соответствие или Структура с ожидаемыми ключами

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

Неопределено или строка — значит, JSON невалиден или прочитан не тот ответ

Значение поля-массива
Норма

Тип Массив, цикл выполняется

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

Неопределено или Структура — ключ отсутствует либо API вернул объект вместо массива

Даты после чтения
Норма

Тип Дата, значения осмысленные

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

Строка — не задан список полей дат; пустая дата — формат ответа отличается от ожидаемого

Кириллица в строковых полях
Норма

Читаемый текст

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

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

Типичные ошибки и ограничения

Самая частая причина сбоя — попытка распарсить не JSON, а HTML-страницу ошибки веб-сервиса или текст «Unauthorized». Перед вызовом ПрочитатьJSON проверяйте HTTP-код ответа (200 или иной успешный) и первый символ строки: валидный JSON начинается с { или [. Обработку ошибок чтения оборачивайте в Попытка...Исключение с записью текста ошибки и фрагмента строки.

Второй источник проблем — кодировка. Если строку JSON вы получаете из HTTP-ответа, убедитесь, что читаете тело в правильной кодировке (обычно UTF-8). Метод ПолучитьТелоКакСтроку() у HTTP-ответа принимает кодировку параметром; если сервис не отдаёт заголовок charset, платформа может определить её неверно.

Наконец, помните про ограничение рекурсии и глубокую вложенность: экзотические документы с сотнями уровней вложенности могут приводить к переполнению стека при чтении. На практике такое встречается редко, но при работе с недокументированными API стоит заложить защитное ограничение глубины обхода.

Перед написанием кода сохраните реальный ответ API в файл и откройте его в любом просмотрщике JSON с подсветкой структуры. Пять минут изучения фактического ответа экономят часы отладки: документация сервисов часто отстаёт от реального формата.
ПЗ
Практическое замечание

Часто задаваемые вопросы

Чем отличается чтение в Структуру от чтения в Соответствие?

Структура позволяет обращаться к полям через точку и удобна для читаемого кода, но требует, чтобы имена ключей были допустимыми идентификаторами 1С. Соответствие работает с любыми именами ключей, включая дефисы и пробелы, и безопаснее для произвольных внешних API.

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

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

Как распарсить JSON, если корневой элемент — массив, а не объект?

Никаких специальных действий не нужно: ПрочитатьJSON вернёт объект Массив, элементами которого будут соответствия или структуры. Просто запустите цикл Для Каждого по результату и обращайтесь к полям каждого элемента.

Можно ли преобразовать JSON сразу в таблицу значений?

Да, для этого существует чтение JSON с сопоставлением схеме (механизмы на базе ЧтениеJSON и построителей), но на практике проще прочитать данные в соответствие и заполнить таблицу значений в цикле — так вы контролируете типы колонок и обработку пропущенных полей.

Как обработать дату в нестандартном формате, например «17.05.2026»?

Автоматическое преобразование работает только для форматов ISO, Microsoft и JavaScript. Для произвольного строкового формата прочитайте значение как строку и преобразуйте вручную: выделите подстроки дня, месяца и года и соберите дату функцией Дата().

Нужны ли внешние компоненты или библиотеки для работы с JSON?

Нет, встроенных средств платформы достаточно для чтения и записи JSON любой сложности. Внешние библиотеки имеет смысл рассматривать только для узких задач вроде валидации по JSON Schema или работы с JSONPath-запросами.

Итог

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

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