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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции 1С с внешними системами через HTTP-запросы разработчики часто сталкиваются с проблемой формирования тела запроса в формате JSON. Попытки собрать JSON-строку вручную с помощью конкатенации строк и экранирования кавычек часто приводят к трудночитаемому коду и синтаксическим ошибкам, которые сложно отладить. В этой статье мы подробно разберем, как правильно формировать JSON, чтобы избежать проблем с кавычками, и какие инструменты платформы 1С:Предприятие сделают этот процесс надежным.

Проблема ручного формирования строки JSON

Рассмотрим типичную ситуацию: необходимо передать токен, идентификаторы и массив данных (например, картинку в формате Base64). При ручной склейке программист вынужден использовать двойные кавычки внутри строки, что в языке 1С выглядит как """". Проанализируем пример неудачного кода:


ТелоЗапроса = "{ ""token"": ""e6...8e"", ""images"": "[""" + Объект.КартинкаBASE64 + """]" }";

Такой подход крайне нестабилен. Стоит забыть одну кавычку или запятую, и принимающая сторона вернет ошибку 400 Bad Request. Кроме того, если в данных (например, в значении поля) встретится символ обратного слеша или кавычка, JSON станет невалидным.

Решение №1: Использование встроенных объектов Структура и Массив

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

Разберем процесс по шагам:

  1. Создаем объект Структура для хранения корневых полей JSON.
  2. Если нужно передать список элементов, создаем Массив и добавляем его в структуру.
  3. Используем объект ЗаписьJSON для преобразования структуры в строку.

Рассмотрим пример реализации:


Функция ПолучитьТелоЗапроса()
    // 1. Формируем корень JSON через структуру
    ДанныеJSON = Новый Структура;
    ДанныеJSON.Вставить("token", "e6_______________8e");
    ДанныеJSON.Вставить("project_id", "U________U");
    ДанныеJSON.Вставить("machine_uid", "JO____________________YP");

    // 2. Формируем массивы
    МассивКартинок = Новый Массив;
    МассивКартинок.Добавить(Объект.КартинкаBASE64);
    ДанныеJSON.Вставить("images", МассивКартинок);

    // Вложенные структуры в массивах (например, информация о процессе)
    МассивИнфо = Новый Массив;
    ДопИнфо = Новый Структура("type", "PASSPORT_REG");
    МассивИнфо.Добавить(ДопИнфо);
    ДанныеJSON.Вставить("process_info", МассивИнфо);

    // 3. Сериализация в строку
    ЗаписьJSON = Новый ЗаписьJSON;
    ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб); // Для красивого кода используем отступы
    ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
    
    ЗаписатьJSON(ЗаписьJSON, ДанныеJSON);
    
    Результат = ЗаписьJSON.Закрыть();
    Возврат Результат;
КонецФункции

Решение №2: Метод ЗаписатьЗначениеJSON для простых задач

Если вам нужно быстро превратить простую структуру или массив в строку, можно воспользоваться методом ЗаписатьЗначениеJSON. Проанализируем ситуацию: этот метод работает быстрее и часто используется в веб-клиенте. Он позволяет выполнить преобразование буквально одной строкой кода, если не требуются сложные настройки формата.

Решение №3: Шаблонные строки (для версий 8.3.18 и выше)

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


Токен = "my_token";
ТелоЗапроса = [ "token": "[Токен]", "status": "active" ];

Хотя этот метод визуально понятнее ручной склейки, мы все равно рекомендуем использовать ЗаписатьJSON, так как шаблоны не обеспечивают автоматического экранирования сложных спецсимволов внутри самих переменных.

Правила ручного экранирования

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

Важно: При ручном формировании в 1С двойная кавычка в строковом литерале удваивается. Например, чтобы получить текст "name": "value", код должен выглядеть так: """name"": ""value""".

Продвинутые приемы работы с JSON

Проанализируем несколько важных аспектов, которые часто упускают из виду:

  1. Обработка Дат: По умолчанию 1С сериализует дату в формат ISO (например, 2023-10-27T10:00:00). Если сервер требует другой формат, используйте параметр ФункцияПреобразования в методе ЗаписатьJSON.
  2. Значения Неопределено: При сериализации значение Неопределено превращается в null. Убедитесь, что ваше API поддерживает обработку null-значений.
  3. Большие объемы данных (Base64): Если вы передаете очень тяжелые картинки, формирование огромной строки в памяти может вызвать ошибку Out of Memory. В таких случаях лучше записывать JSON сразу в файл на диске, используя ЗаписьJSON.ОткрытьФайл().
  4. Валидация: Перед отправкой запроса всегда полезно проверить результат. Простейший способ — попробовать прочитать полученную строку методом ПрочитатьJSON. Если возникла ошибка — ваш JSON сформирован некорректно.

Подводя итог, использование объектов Структура и ЗаписьJSON является стандартом де-факто в разработке на платформе 1С. Это избавляет от путаницы с кавычками, делает код "чистым" и значительно сокращает время на поиск ошибок в HTTP-интеграциях.

← На главную