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

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

Как прочитать JSON файл в 1С

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

JSON — стандартный формат обмена данными между 1С и внешними системами: веб-сервисами, сайтами, банковскими API, мобильными приложениями. Во встроенном языке 1С есть штатные объекты для разбора JSON, и сторонние библиотеки для этой задачи не нужны.

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

Ниже разобраны оба способа: чтение файла с диска, разбор строки, обход вложенных объектов и массивов, обработка ошибок и типичные проблемы с кодировкой. Примеры кода можно копировать в модуль и адаптировать под свою структуру данных.

Как устроено чтение JSON в платформе 1С

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

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

Сравнение вариантов

ПрочитатьJSON()

Подходит для файлов умеренного размера и ответов API. Возвращает готовую структуру данных. Ограничение — весь JSON загружается в память.

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

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

Чтение JSON из файла на диске

Типовая задача — прочитать файл, который внешняя система положила в каталог обмена. Сначала файл загружается как текст, затем текст передаётся в ПрочитатьJSON. Важно явно указать кодировку: чаще всего JSON-файлы сохраняются в UTF-8.

Функция ПрочитатьJSONИзФайла(ПутьКФайлу)

ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8);

СтрокаJSON = ЧтениеТекста.Прочитать();

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

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

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

Результат = ПрочитатьJSON(ЧтениеJSON);

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

Возврат Результат;

КонецФункции

Функция ПрочитатьJSON по умолчанию возвращает Структуру для объектов и Массив для массивов JSON. Если вызвать её со вторым параметром Истина (ПрочитатьJSON(ЧтениеJSON, Истина)), объекты будут преобразованы в Соответствие. Соответствие удобнее, когда имена свойств заранее неизвестны или содержат символы, недопустимые для ключей структуры (пробелы, дефисы, цифры в начале).

Разбор строки JSON без файла

Когда JSON приходит как строка — из HTTP-ответа, из регистра сведений, из параметра запроса — файл на диске не нужен. Строка передаётся напрямую через метод УстановитьСтроку:

СтрокаJSON = "{""Номенклатура"":""Кабель"",""Цена"":150.5,""Активен"":true}";

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

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

Данные = ПрочитатьJSON(ЧтениеJSON);

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

Сообщить(Данные.Номенклатура); // Кабель

Сообщить(Данные.Цена); // 150.5

Обратите внимание на типы результата: строки JSON становятся строками 1С, числа — числами, true/false — булево, null — значением Неопределено. Даты автоматически не преобразуются: JSON не имеет типа «дата», поэтому даты приходят строками и их нужно парсить отдельно.

Работа с массивами и вложенными объектами

Реальные выгрузки редко состоят из одного плоского объекта. Обычно это массив записей с вложенными структурами. Обход выполняется стандартными циклами:

// JSON: {"Заказы":[{"Номер":"001","Сумма":1000},{"Номер":"002","Сумма":2500}]}

Данные = ПрочитатьJSON(ЧтениеJSON);

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

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

Сообщить(Заказ.Номер + " — " + Заказ.Сумма);

КонецЦикла;

КонецЕсли;

Ключевое правило безопасного разбора — всегда проверять наличие свойства через Свойство("Имя") перед обращением. Внешние системы могут пропускать необязательные поля, и прямое обращение к отсутствующему свойству структуры вызовет исключение. Для соответствия аналогичная проверка — получение значения и сравнение с Неопределено.

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

Потоковое чтение больших файлов через ЧтениеJSON

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

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

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

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

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

ИмяСвойства = ЧтениеJSON.ТекущееЗначение;

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

// обработка значения

КонецЕсли;

КонецЦикла;

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

Метод Прочитать() возвращает Ложь, когда поток закончился. Тип текущего элемента определяется перечислением ТипЗначенияJSON: НачалоОбъекта, КонецОбъекта, НачалоМассива, ИмяСвойства, Строка, Число, Булево, Null. Такой код сложнее, зато расход памяти не зависит от размера файла.

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

Обработка ошибок и кодировки

Разбор JSON — место, где исключения возникают регулярно: внешняя система прислала обрезанный файл, HTML-страницу с ошибкой вместо JSON, невалидные символы. Любой вызов ПрочитатьJSON следует оборачивать в попытку:

Попытка

Данные = ПрочитатьJSON(ЧтениеJSON);

Исключение

ТекстОшибки = ОписаниеОшибки();

ЗаписьЖурналаРегистрации("Обмен JSON",

УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);

Возврат Неопределено;

КонецПопытки;

Отдельная группа проблем — кодировка. Если после чтения файла вместо кириллицы видны «кракозябры», файл сохранён не в UTF-8. Проверьте, какой кодировкой пишет внешняя система, и укажите её в ЧтениеТекста явно: КодировкаТекста.ANSI или КодировкаТекста.UTF16. Также учитывайте, что файл в UTF-8 может содержать BOM — ЧтениеТекста обрабатывает его корректно, а вот при ручном чтении через ЧтениеДанных BOM может попасть в начало строки и сломать разбор.

Типичные ошибки
01
Обращение к свойству без проверки Свойство() — исключение, если поле отсутствует в ответе
02
Чтение в Структуру при именах свойств с дефисами — ошибка преобразования; нужно Соответствие
03
Чтение файла без указания кодировки — искажённая кириллица в данных
04
Ожидание автоматического преобразования дат — даты приходят строками и требуют ручного разбора
05
Загрузка огромного файла через ПрочитатьJSON целиком — переполнение памяти сеанса

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

Быстрый способ убедиться, что JSON разобран правильно, — вывести полученную структуру в сообщения или в отладчике. В конфигураторе поставьте точку останова сразу после ПрочитатьJSON и посмотрите переменную через «Вычислить выражение»: структура раскрывается деревом, видно все ключи и типы значений.

Для проверки валидности JSON до разбора удобно открыть файл в любом редакторе с подсветкой (Notepad++, VS Code): редактор сразу покажет синтаксическую ошибку — незакрытую скобку, лишнюю запятую. Запятая перед закрывающей скобкой — самая частая причина невалидного JSON, который генерируют самописные выгрузки.

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

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

Тип возвращаемого значения
Норма

Структура, Соответствие или Массив — в зависимости от корня JSON

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

Неопределено или исключение при разборе

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

Текст читается нормально

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

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

Обязательные поля
Норма

Все ожидаемые свойства присутствуют и имеют нужный тип

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

Часть полей отсутствует — добавьте проверки Свойство() и значения по умолчанию

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

Чем отличается ПрочитатьJSON от ЧтениеJSON?

ЧтениеJSON — это объект-«считыватель», который открывает источник данных (строку или файл). ПрочитатьJSON — глобальная процедура, которая за один вызов превращает весь поток из ЧтениеJSON в готовое дерево значений (Структуру, Соответствие, Массив). Обычно они используются вместе: сначала создаётся ЧтениеJSON, затем вызывается ПрочитатьJSON.

Как преобразовать строковую дату из JSON в тип Дата 1С?

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

Почему возникает ошибка «Недопустимое имя свойства»?

ПрочитатьJSON по умолчанию создаёт Структуру, а ключи структуры должны подчиняться правилам имён переменных: без пробелов, дефисов, не начинаться с цифры. Если во входящем JSON есть свойства вида «order-id» или «123abc», читайте данные в Соответствие, передав вторым параметром Истина.

Можно ли прочитать JSON в управляемых формах и на тонком клиенте?

Да, ПрочитатьJSON и ЧтениеJSON доступны на тонком и веб-клиенте. Ограничение касается файловой системы: на клиенте чтение файла требует интерактивного выбора или расширения работы с файлами. Стандартная схема — передать файл на сервер (НачатьПомещениеФайлаНаСервер) и разобрать его в серверной процедуре.

Что делать, если JSON содержит вложенные массивы внутри массивов?

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

Как записать данные обратно в JSON?

Используется зеркальная пара: объект ЗаписьJSON и процедура ЗаписатьJSON(Запись, Данные). Структуры, соответствия, массивы и примитивные типы сериализуются автоматически. Для дат применяется функция ЗаписатьДатуJSON с указанием формата, например ФорматДатыJSON.ISO.

Итог

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

Основной путь: ЧтениеТекста для файла → ЧтениеJSON с УстановитьСтроку → ПрочитатьJSON. Читайте в Соответствие при проблемных именах свойств, проверяйте наличие полей через Свойство(), оборачивайте разбор в Попытку, а для больших файлов применяйте потоковое чтение.