При интеграции 1С с внешними системами через HTTP-запросы разработчики часто сталкиваются с проблемой формирования тела запроса в формате JSON. Попытки собрать JSON-строку вручную с помощью конкатенации строк и экранирования кавычек часто приводят к трудночитаемому коду и синтаксическим ошибкам, которые сложно отладить. В этой статье мы подробно разберем, как правильно формировать JSON, чтобы избежать проблем с кавычками, и какие инструменты платформы 1С:Предприятие сделают этот процесс надежным.
Рассмотрим типичную ситуацию: необходимо передать токен, идентификаторы и массив данных (например, картинку в формате Base64). При ручной склейке программист вынужден использовать двойные кавычки внутри строки, что в языке 1С выглядит как """". Проанализируем пример неудачного кода:
ТелоЗапроса = "{ ""token"": ""e6...8e"", ""images"": "[""" + Объект.КартинкаBASE64 + """]" }";
Такой подход крайне нестабилен. Стоит забыть одну кавычку или запятую, и принимающая сторона вернет ошибку 400 Bad Request. Кроме того, если в данных (например, в значении поля) встретится символ обратного слеша или кавычка, JSON станет невалидным.
Самый правильный и надежный способ — это создание структуры данных на стороне 1С и её последующая автоматическая сериализация. Выясним, почему это лучше: платформа сама расставит все кавычки, экранирует спецсимволы и сформирует правильные скобки (фигурные для объектов и квадратные для массивов).
Разберем процесс по шагам:
Структура для хранения корневых полей JSON.Массив и добавляем его в структуру.Запись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.Закрыть();
Возврат Результат;
КонецФункции
Если вам нужно быстро превратить простую структуру или массив в строку, можно воспользоваться методом ЗаписатьЗначениеJSON. Проанализируем ситуацию: этот метод работает быстрее и часто используется в веб-клиенте. Он позволяет выполнить преобразование буквально одной строкой кода, если не требуются сложные настройки формата.
В современных версиях платформы появилась возможность использовать шаблонные строки. Они позволяют вставлять переменные прямо в текст, обрамляя их квадратными скобками, а саму строку — символом обратного апострофа (на клавише "Ё"). Посмотрим на пример:
Токен = "my_token";
ТелоЗапроса = [ "token": "[Токен]", "status": "active" ];
Хотя этот метод визуально понятнее ручной склейки, мы все равно рекомендуем использовать ЗаписатьJSON, так как шаблоны не обеспечивают автоматического экранирования сложных спецсимволов внутри самих переменных.
Если в силу специфических требований вам все же приходится формировать JSON вручную, важно помнить основные правила экранирования символов. Рассмотрим основные из них:
" должна превращаться в \".\ должен превращаться в \\.\n, табуляция — в \t.Важно: При ручном формировании в 1С двойная кавычка в строковом литерале удваивается. Например, чтобы получить текст "name": "value", код должен выглядеть так: """name"": ""value""".
Проанализируем несколько важных аспектов, которые часто упускают из виду:
ФункцияПреобразования в методе ЗаписатьJSON.Неопределено превращается в null. Убедитесь, что ваше API поддерживает обработку null-значений.ЗаписьJSON.ОткрытьФайл().ПрочитатьJSON. Если возникла ошибка — ваш JSON сформирован некорректно.Подводя итог, использование объектов Структура и ЗаписьJSON является стандартом де-факто в разработке на платформе 1С. Это избавляет от путаницы с кавычками, делает код "чистым" и значительно сокращает время на поиск ошибок в HTTP-интеграциях.