Разработка и Конфигурация · 11 мин
JSON в 1С:Предприятие: что это и как с ним работать
Что такое JSON в 1С:Предприятие, зачем он нужен для обмена данными, как прочитать и записать JSON средствами встроенного языка, типичные ошибки и FAQ.
JSON (JavaScript Object Notation) — это текстовый формат обмена данными, который стал фактическим стандартом для интеграции информационных систем. В контексте 1С:Предприятие JSON используется для обмена с сайтами, интернет-магазинами, банковскими сервисами, мобильными приложениями, CRM и любыми внешними API. Практически любая современная интеграция 1С с внешним сервисом так или иначе проходит через JSON.
Платформа 1С:Предприятие 8.3 содержит встроенные средства работы с JSON: объекты ЧтениеJSON, ЗаписьJSON, функции ПрочитатьJSON() и ЗаписатьJSON(). Это значит, что для разбора и формирования JSON не нужны внешние компоненты или сторонние библиотеки — всё делается штатными средствами встроенного языка.
Типичный сценарий выглядит так: 1С отправляет HTTP-запрос к внешнему сервису (например, к API службы доставки), получает в ответ строку в формате JSON, разбирает её в структуры, соответствия, массивы и примитивные значения, а затем использует данные для создания документов, обновления справочников или формирования отчётов. Обратный путь — когда 1С сама выступает источником данных и отдаёт JSON через HTTP-сервисы — встречается не реже.
Что такое JSON и как выглядят данные в этом формате
JSON — это способ записать структурированные данные обычным текстом. Формат поддерживает несколько типов значений: строки (в двойных кавычках), числа, логические значения true и false, пустое значение null, массивы (в квадратных скобках) и объекты — наборы пар «ключ: значение» в фигурных скобках.
Пример JSON-фрагмента, который мог бы вернуть внешний сервис при запросе данных о заказе:
{"НомерЗаказа": "A-1024", "Сумма": 15750.5, "Оплачен": true, "Товары": [{"Код": "Т-100", "Количество": 2}]}
Такой текст легко читается и человеком, и программой. Именно поэтому JSON вытеснил более громоздкий XML в большинстве веб-интеграций: меньше служебных символов, проще разбор, компактнее передача по сети.
Какие средства работы с JSON есть в платформе 1С
Платформа предлагает два подхода к работе с JSON, и выбор между ними зависит от задачи.
Первый подход — потоковые объекты ЧтениеJSON и ЗаписьJSON. Они обрабатывают данные последовательно, фрагмент за фрагментом, и подходят для больших файлов, где загрузка всего содержимого в память нежелательна. Второй подход — глобальные функции ПрочитатьJSON() и ЗаписатьJSON(), которые преобразуют весь документ целиком в объекты встроенного языка.
Дополнительно существуют объекты ЧтениеДанныхJSON и ЗаписьДанныхJSON для работы с прикладными типами (например, ссылками и датами через формат сериализации), но в типовых интеграциях с внешними API они используются редко, так как внешние системы не знают про типы 1С.
Сравнение вариантов
Потоковая обработка, подходит для больших файлов и нестандартных структур. Требует больше кода и аккуратности.
Преобразуют документ целиком в Соответствие или Структуру за один вызов. Оптимально для типовых API-ответов небольшого и среднего размера.
Оправданы только при специфических требованиях; в большинстве случаев избыточны, так как штатных средств достаточно.
Как прочитать JSON в 1С
Самый короткий путь — функция ПрочитатьJSON(). Она принимает объект ЧтениеJSON и возвращает данные в виде Соответствие (по умолчанию) или Структура, если передать вторым параметром значение Истина. Массивы превращаются в Массив, строки и числа — в примитивные типы.
Типовой фрагмент кода выглядит так:
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстОтвета);
Данные = ПрочитатьJSON(Чтение, Истина);
Чтение.Закрыть();
Сумма = Данные.Сумма;
Для Каждого СтрокаТовара Из Данные.Товары Цикл
// обработка строки
КонецЦикла;
Важный нюанс: если выбрать Соответствие, обращаться к полям нужно через квадратные скобки — Данные["Сумма"], а имена ключей могут быть любыми, включая те, что недопустимы для свойств структуры (с пробелами, дефисами, цифрой в начале). Внешние API часто используют ключи вроде "order-id", поэтому Соответствие — более безопасный выбор по умолчанию.
- 1Получите текст JSON (ответ HTTP-запроса, файл, строка из регистра).
- 2Создайте объект ЧтениеJSON и вызовите УстановитьСтроку() или ОткрытьФайл().
- 3Вызовите ПрочитатьJSON() с нужным форматом: Соответствие или Структура.
- 4Проверьте наличие ожидаемых ключей перед обращением к ним.
- 5Обработайте вложенные массивы и объекты, закройте объект чтения.
Как записать JSON из 1С
Для формирования JSON используется объект ЗаписьJSON в паре с функцией ЗаписатьJSON(). Функция умеет сериализовать структуры, соответствия, массивы, таблицы значений и примитивные типы.
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Данные = Новый Структура;
Данные.Вставить("НомерЗаказа", "A-1024");
Данные.Вставить("Сумма", 15750.5);
ЗаписатьJSON(Запись, Данные);
ТекстJSON = Запись.Закрыть();
На выходе получится строка, которую можно отправить в тело HTTP-запроса к внешнему сервису. Даты требуют отдельного внимания: у JSON нет собственного типа «дата», поэтому дату нужно заранее преобразовать в строку в формате, который ожидает принимающая сторона (чаще всего ISO 8601, например 2026-05-17T10:30:00).
Типичные сценарии использования JSON в 1С
Интеграция с сайтом или интернет-магазином
1С получает заказы с сайта: регламентное задание периодически обращается к API магазина, читает JSON со списком новых заказов и создаёт документы «Заказ покупателя». В обратную сторону 1С отдаёт остатки и цены, формируя JSON и передавая его на сайт.
Обмен с банками и государственными сервисами
Многие банковские API, сервисы проверки контрагентов, системы маркировки и электронного документооборота работают именно через JSON поверх HTTPS. Здесь важна корректная обработка ошибок: сервис может вернуть JSON с описанием ошибки вместо ожидаемых данных, и код должен различать эти ситуации.
Публикация собственных HTTP-сервисов
1С может сама выступать сервером: через объект метаданных «HTTP-сервис» конфигурация принимает запросы от внешних систем и отвечает им JSON-документами. Это стандартный способ дать мобильному приложению или партнёрской системе доступ к данным учёта.
Перед разбором ответа внешнего API полезно сохранить исходный текст JSON в журнал или регистр сведений. Когда интеграция «внезапно перестаёт работать», чаще всего причина в изменении формата на стороне сервиса — а сохранённый ответ позволяет быстро увидеть, что именно поменялось.
Частые ошибки при работе с JSON в 1С
Первая группа ошибок связана с типами данных. Число в JSON может прийти строкой ("Сумма": "15750.5"), и попытка сложить его с числом даст ошибку или неожиданный результат. Даты приходят строками, логические значения иногда передаются как "true" в кавычках. Всегда проверяйте фактический тип значения перед использованием.
Вторая группа — обращение к несуществующим ключам. Если внешний сервис не вернул поле, обращение Данные.Сумма к структуре вызовет исключение. Используйте проверку Данные.Свойство("Сумма", ЗначениеСуммы) для структур или Данные.Получить("Сумма") для соответствий.
Третья группа — кодировка и формат текста. JSON должен обрабатываться в UTF-8; если текст получен из файла в другой кодировке, кириллица превратится в нечитаемые символы ещё до разбора. При чтении из файла явно указывайте кодировку в методе ОткрытьФайл().
Как проверить корректность обмена
После настройки чтения или записи JSON проверьте результат на контрольном примере. Для чтения: возьмите реальный ответ сервиса, разберите его и сравните значения полей с исходным текстом. Для записи: сформируйте JSON и проверьте его любым онлайн-валидатором или повторным чтением через ПрочитатьJSON() — если документ читается обратно без ошибок и значения совпадают, сериализация корректна.
Полезный приём — «круговой тест»: сериализовать структуру в JSON, тут же прочитать её обратно и сравнить с исходной. Расхождения сразу покажут проблемы с типами и форматами дат.
Как проверить результат
Все ожидаемые поля доступны, типы значений соответствуют ожиданиям
Исключение при обращении к полю или значение неожиданного типа
Текст валиден, повторное чтение через ПрочитатьJSON проходит без ошибок
Ошибка разбора, потерянные или искажённые значения
Русские символы читаются корректно на обеих сторонах
Кракозябры — признак неверной кодировки при чтении или записи текста
Что важно запомнить
JSON — основной формат интеграции 1С с внешними системами. Платформа 8.3 читает и пишет JSON штатными средствами: ЧтениеJSON/ЗаписьJSON и ПрочитатьJSON/ЗаписатьJSON. Ключевые правила: проверяйте наличие полей и типы значений, оборачивайте разбор в Попытку/Исключение, согласуйте формат дат и кодировку с принимающей стороной.
Частые вопросы
Чем JSON отличается от XML в контексте 1С?
Оба формата поддерживаются платформой. JSON компактнее и проще в разборе, поэтому доминирует в веб-API. XML остаётся стандартом в регламентированном обмене: электронные документы, отчётность, форматы ФНС и банковские выписки. Выбор обычно определяется требованиями внешней системы, а не предпочтениями разработчика.
Как прочитать JSON, если имена ключей содержат дефисы или пробелы?
Используйте чтение в Соответствие (второй параметр ПрочитатьJSON — Ложь или не указан) и обращайтесь к значениям через квадратные скобки: Данные["order-id"]. Структура такие имена ключей не поддерживает.
Можно ли передать в JSON ссылку на объект 1С?
Напрямую — нет, внешняя система не поймёт внутренний формат ссылки. Передавайте строковое представление уникального идентификатора (Строка(Ссылка.УникальныйИдентификатор())) или код/номер объекта, а при обратном приёме находите объект по этому идентификатору.
Что делать, если ПрочитатьJSON выдаёт ошибку?
Сначала сохраните исходный текст и проверьте его валидатором: часто ответ содержит HTML-страницу ошибки вместо JSON, лишние символы в начале или обрезанное тело. Также проверьте кодировку текста. Разбор оборачивайте в Попытка/Исключение с записью текста ошибки и исходного ответа в журнал.
Как передать дату в JSON из 1С?
У JSON нет типа «дата», поэтому дату преобразуют в строку. Чаще всего используют формат ISO 8601: Формат(Дата, "ДФ=гггг-ММ-ддTЧЧ:мм:сс"). Конкретный формат уточняйте в документации принимающего API — некоторые сервисы ждут Unix-время числом или собственный шаблон.
Подходит ли JSON для обмена большими объёмами данных?
Для массивов из десятков тысяч элементов JSON работает, но становится тяжеловесным: файл большой, разбор целиком требует памяти. В таких случаях используйте потоковое чтение через ЧтениеJSON, постраничную выгрузку через API или рассмотрите альтернативы — файловый обмен, прямое подключение к базе, очереди сообщений.