Разработка и Конфигурация · 11 мин
Как прочитать JSON в 1С: пошаговое руководство
Как прочитать JSON в 1С: ПрочитатьJSON с датами, ЧтениеJSON и потоковый разбор, обработка ошибок, работа с файлами и HTTP-ответами, типовые ошибки и FAQ.
JSON — стандартный формат обмена данными между 1С и внешними системами: веб-сервисами, сайтами, банковскими API, мобильными приложениями. Во встроенном языке 1С есть штатные средства разбора JSON, и сторонние библиотеки для этой задачи не нужны. Основной инструмент — глобальный метод ПрочитатьJSON, который преобразует текст JSON в структуры, соответствия и массивы 1С.
Типичная задача выглядит так: вы получили строку JSON из файла, HTTP-ответа или веб-сервиса и хотите обратиться к её полям как к обычным данным 1С. Для этого достаточно создать объект ЧтениеJSON, передать в него строку и вызвать ПрочитатьJSON. Результат — объект типа «Соответствие» (или «Структура», если указать параметр), с которым работают привычным способом.
Важные нюансы возникают на трёх этапах: чтение дат (они в JSON — просто строки), обработка ошибок в некорректном JSON и разбор больших файлов, которые нежелательно целиком загружать в память. Ниже разобраны все эти сценарии с готовым кодом.
Базовый способ: ПрочитатьJSON
Минимальный рабочий код для разбора JSON-строки состоит из четырёх строк. Создаём объект ЧтениеJSON, передаём ему текст методом УстановитьСтроку, читаем данные и закрываем объект:
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстJSON);
Данные = ПрочитатьJSON(Чтение, Истина); // Истина — результат в виде Соответствия
Чтение.Закрыть();
НазваниеОрганизации = Данные["name"];
Сумма = Данные["total"];
Второй параметр ПрочитатьJSON определяет тип результата. Значение Истина возвращает Соответствие, где значения извлекаются по ключу в квадратных скобках — это безопасный вариант, потому что имена полей JSON могут содержать символы, недопустимые для имён переменных 1С (дефисы, пробелы, цифры в начале). Значение Ложь возвращает Структуру, к полям которой обращаются через точку: Данные.name. Структура удобнее в коде, но упадёт с ошибкой на «нестандартных» именах ключей.
Вложенные объекты и массивы разбираются автоматически: вложенный объект станет таким же соответствием/структурой, а JSON-массив — объектом типа «Массив», который обходится циклом Для Каждого или по индексу.
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстJSON);
Данные = ПрочитатьJSON(Чтение, Истина);
Чтение.Закрыть();
Для Каждого Элемент Из Данные["items"] Цикл
Сообщить(Элемент["sku"] + " — " + Элемент["price"]);
КонецЦикла;Чтение JSON из файла и из HTTP-ответа
Если JSON хранится в файле, строку читать вручную не обязательно — ЧтениеJSON умеет открывать файл напрямую методом ОткрытьФайл. Вторым параметром можно указать кодировку, если файл не в UTF-8:
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл("C:\Обмен\orders.json", КодировкаТекста.UTF8);
Данные = ПрочитатьJSON(Чтение, Истина);
Чтение.Закрыть();
При получении JSON через HTTP-запрос важно правильно прочитать тело ответа. Метод ПолучитьТелоКакСтроку() по умолчанию пытается определить кодировку из заголовков ответа; если сервер не передаёт корректный charset, кириллица превратится в нечитаемые символы. Надёжнее явно указать кодировку: Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8).
- 1Создайте HTTPСоединение и HTTPЗапрос, выполните запрос методом Получить или ВызватьHTTPМетод
- 2Проверьте КодСостояния ответа: 200 — успех, иные коды требуют отдельной обработки
- 3Получите тело: Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8)
- 4Создайте ЧтениеJSON, вызовите УстановитьСтроку с полученным текстом
- 5Вызовите ПрочитатьJSON(Чтение, Истина) и закройте объект чтения
- 6Проверьте наличие нужных ключей в результате перед обращением к ним
На сервере 1С файловые операции выполняются в контексте сервера, поэтому путь к файлу должен быть доступен именно серверному процессу, а не клиентской машине. Это частая причина ошибки «файл не найден» при переносе обработки с файловой базы на клиент-серверную.
Как правильно прочитать даты из JSON
В JSON нет отдельного типа «дата» — даты передаются строками, чаще всего в формате ISO 8601: "2026-03-15T10:30:00". По умолчанию ПрочитатьJSON вернёт такое значение как строку, и сравнение дат или запись в реквизит типа «Дата» потребуют ручного преобразования.
Штатное решение — третий параметр ПрочитатьJSON, в который передаётся массив имён полей, содержащих даты. Метод автоматически преобразует значения этих полей из формата ISO в тип «Дата»:
ПоляДат = Новый Массив;
ПоляДат.Добавить("date");
ПоляДат.Добавить("createdAt");
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстJSON);
Данные = ПрочитатьJSON(Чтение, Истина, ПоляДат);
Чтение.Закрыть();
Если внешняя система передаёт даты в нестандартном формате (например, «15.03.2026» или Unix timestamp), автоматическое преобразование не сработает — значение останется строкой или числом. Unix timestamp (секунды с 01.01.1970) преобразуется выражением Дата(1970,1,1) + ЗначениеПоля, а произвольный строковый формат придётся разбирать вручную через строковые функции.
Обработка ошибок и проверка результата
Некорректный JSON — обычная ситуация при интеграциях: обрезанный ответ сервера, HTML-страница ошибки вместо JSON, BOM-символы в начале файла. Вызов ПрочитатьJSON на таких данных вызывает исключение, поэтому разбор всегда стоит оборачивать в попытку:
Попытка
Данные = ПрочитатьJSON(Чтение, Истина);
Исключение
ЗаписьЖурналаРегистрации("Загрузка JSON", УровеньЖурналаРегистрации.Ошибка,,,
ОписаниеОшибки());
Возврат;
КонецПопытки;
Вторая группа ошибок — обращение к несуществующим ключам. Если в JSON нет поля total, то Данные["total"] вернёт Неопределено для соответствия, а для структуры обращение к отсутствующему свойству вызовет исключение. Перед использованием значения проверяйте его наличие методом Свойство (для структуры) или сравнением с Неопределено (для соответствия).
Отдельного внимания заслуживает значение null в JSON: оно преобразуется в Неопределено. Если логика дальше предполагает число или строку, явно подставляйте значение по умолчанию, например: Сумма = ?(Данные["total"] = Неопределено, 0, Данные["total"]).
Потоковое чтение больших JSON-файлов
Метод ПрочитатьJSON загружает весь документ в память и строит дерево объектов. Для файлов в десятки и сотни мегабайт это приводит к большому расходу памяти и длительному выполнению. Альтернатива — последовательное чтение методом Читать() объекта ЧтениеJSON, который перемещается по документу токен за токеном.
При потоковом чтении после каждого вызова Читать() проверяется ТипТекущегоЗначения: начало объекта, имя свойства, значение, начало массива и так далее. Такой подход позволяет обрабатывать элементы массива по одному — например, сразу записывать каждую накладную в базу, не накапливая весь список в памяти:
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл(ИмяФайла);
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.НачалоОбъекта Тогда
// обработка очередного объекта
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();
Компромиссный вариант — комбинировать подходы: потоково найти начало нужного массива, а каждый его элемент читать целиком через ПрочитатьJSON с параметром ЧтениеJSON в качестве источника. Это сохраняет удобство работы с соответствиями и при этом ограничивает потребление памяти размером одного элемента.
Выбор способа чтения
Подходит для ответов API и файлов разумного размера. Код проще всего, но весь документ загружается в память.
Для больших файлов и массивов с тысячами элементов. Код сложнее, зато память расходуется минимально и данные можно писать в базу порциями.
Потоково ищется нужный массив, элементы читаются через ПрочитатьJSON. Баланс удобства и экономии памяти.
Проверка корректности разбора
После разбора полезно убедиться, что данные соответствуют ожиданиям, прежде чем записывать их в базу. Минимальный набор проверок: тип верхнего уровня (соответствие или массив), наличие обязательных ключей, типы критичных значений. Функция ТипЗнч помогает отличить соответствие от массива и число от строки.
Для отладки удобно вывести полученную структуру в сообщение или журнал: сериализовать результат обратно в JSON через ЗаписатьJSON и сравнить с исходным текстом. Расхождения сразу покажут, где потерялись данные — например, из-за непреобразованных дат или null-полей.
Как проверить результат
Соответствие или Массив, соответствующий структуре исходного JSON
Строка или Число — вероятно, прочитан не тот фрагмент или JSON содержит скалярное значение
Текст читаемый, без символов � и вопросительных знаков
Кракозябры — неверная кодировка при чтении файла или тела ответа
Тип Дата, значения совпадают с исходными
Строка — поле не передано в списке полей дат или формат не ISO
Все нужные ключи присутствуют, значения не равны Неопределено
Ключ отсутствует или null — нужна обработка значения по умолчанию
FAQ
Чем отличается Соответствие от Структуры при чтении JSON?
Соответствие допускает любые имена ключей, включая дефисы и пробелы, и безопасно возвращает Неопределено для отсутствующего ключа. Структура удобнее в коде (обращение через точку), но требует, чтобы имена полей были допустимыми идентификаторами 1С. Для данных из внешних систем надёжнее Соответствие.
Как прочитать JSON, если файл в кодировке Windows-1251?
Передайте кодировку вторым параметром метода ОткрытьФайл: Чтение.ОткрытьФайл(ИмяФайла, КодировкаТекста.ANSI) или явно КодировкаТекста.ПолучитьКодировку("windows-1251"). Если читаете файл через ЧтениеТекста, кодировка указывается аналогично в его конструкторе.
Что делать, если ПрочитатьJSON выдаёт ошибку на первом символе?
Чаще всего причина в BOM (служебных байтах в начале файла), HTML-странице ошибки вместо JSON или пустой строке. Выведите первые 100–200 символов текста и проверьте, что это действительно JSON, начинающийся с { или [. BOM обычно устраняется корректным указанием кодировки при чтении файла.
Как преобразовать Unix timestamp из JSON в дату 1С?
Unix timestamp — это число секунд с 1 января 1970 года UTC. Выражение Дата(1970,1,1) + ЗначениеПоля даст дату в 1С. Учтите часовой пояс: timestamp обычно в UTC, поэтому для локального времени добавьте смещение вашего часового пояса в секундах.
Можно ли прочитать JSON на клиенте в управляемых формах?
Да, ЧтениеJSON и ПрочитатьJSON доступны на тонком и веб-клиенте. Ограничение касается файловых операций: ОткрытьФайл требует доступа к файловой системе клиента, поэтому в веб-клиенте файл обычно сначала помещают во временное хранилище и передают на сервер для разбора.
Как прочитать JSON с повторяющимися полями или нестандартной структурой?
Стандартный разбор при дублирующихся ключах оставит последнее значение. Если структура документа нестандартная и требует полного контроля, используйте потоковое чтение через Читать() — оно позволяет обработать каждое свойство вручную в том порядке, в котором оно встречается в документе.
Что важно запомнить
Основной способ чтения JSON в 1С — ЧтениеJSON плюс ПрочитатьJSON с параметром Истина для получения Соответствия. Даты преобразуйте через список полей дат, разбор оборачивайте в Попытка/Исключение, кодировку указывайте явно, а большие файлы читайте потоково методом Читать(). Перед записью в базу проверяйте наличие ключей и значения null.