Разработка и Конфигурация · 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. Результат — соответствие (по умолчанию) или структура, если передать второй параметр.
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение, Истина); // Истина — читать в Соответствие
Чтение.Закрыть();
Имя = Данные["name"];
Цена = Данные["price"];Обратите внимание на второй параметр ПрочитатьJSON. Если передать Истина, результатом будет Соответствие, и обращение к полям идёт через квадратные скобки: Данные["name"]. Если передать Ложь или опустить параметр, результатом будет Структура, и поля доступны через точку: Данные.name.
Выбор между структурой и соответствием — не только вкусовщина. Соответствие безопаснее, когда имена полей могут содержать символы, недопустимые для идентификаторов 1С (дефисы, пробелы, цифры в начале), или когда имя поля совпадает с зарезервированным словом. Структура удобнее для чтения кода, но требует «чистых» имён полей.
Как обработать массивы и вложенные объекты
Массив JSON преобразуется в объект Массив встроенного языка, а вложенный объект — во вложенное соответствие или структуру. Обход выполняется обычным циклом Для Каждого. Типичный пример — разбор списка заказов из ответа API маркетплейса.
Для Каждого Заказ Из Данные["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 разделителем всегда является точка, и платформа это учитывает корректно.
Потоковое чтение больших JSON-документов
Если ответ внешней системы занимает десятки мегабайт (выгрузка каталога, история операций за длительный период), загрузка всего документа в память одним вызовом может привести к замедлению или переполнению памяти сервера. В этом случае используют последовательное чтение через ЧтениеJSON.
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл(ПутьКФайлу);
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипТекущегоЗначения = ТипЗначения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, задавайте список полей-дат, проверяйте наличие ключей и типы перед использованием, а ошибки чтения фиксируйте с осторожностью к чувствительным данным.