При интеграции с внешними API, такими как сервисы Почты России, разработчики часто сталкиваются с форматом JSON, где имена ключей содержат символы, недопустимые для имен свойств объекта Структура в 1С (например, дефисы). Попытка создать Структура с ключом "index-to" вызывает ошибку платформы: «Задано неправильное имя атрибута структуры».
Давайте разберемся, как правильно подготовить данные для отправки HTTP-запроса, чтобы обойти это ограничение и корректно сформировать тело запроса.
Самый простой и эффективный способ обойти ограничение на имена атрибутов — заменить объект Структура на Соответствие. В отличие от Структура, Соответствие позволяет использовать любые строковые значения в качестве ключей, включая дефисы, пробелы и другие спецсимволы.
Рассмотрим по шагам, как подготовить такой запрос:
Соответствие вместо Структура.Соответствие в строку JSON с помощью объекта ЗаписьJSON.Пример реализации заполнения данных:
тДанные = Новый Соответствие;
тДанные.Вставить("index-to", "100427");
тДанные.Вставить("completeness-checking", Истина);
тДанные.Вставить("courier", Истина);
Часто API требует передачи вложенных структур или массивов. Чтобы сформировать сложный объект, мы можем вкладывать в Соответствие другие объекты (например, Структура для стандартных полей или новое Соответствие для полей с дефисами).
Если вам нужно добавить вложенный объект, например "dimension", вы можете поступить следующим образом:
тДанные["dimension"] = Новый Структура("height,length,width", 0, 0, 0);
Если же внутри JSON требуется массив из нескольких объектов с одинаковыми ключами, мы используем объект Массив:
tariffList = Новый Массив;
tariffList.Добавить(Новый Структура("id", 1));
tariffList.Добавить(Новый Структура("id", 8));
тДанные["tariffList"] = tariffList;
После того как все данные собраны, необходимо правильно преобразовать Соответствие в строку формата JSON. Для этого используем методы ЗаписьJSON и ЗаписатьJSON.
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, тДанные);
СтрокаJSON = Запись.Закрыть();
HTTPЗапрос = Новый HTTPЗапрос("/v1/api/method");
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
Соединение = Новый HTTPСоединение("адрес.сервера.ru", 443, , , Новый ЗащищенноеСоединениеOpenSSL());
Результат = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
При работе с JSON в 1С важно учитывать несколько нюансов, которые помогут избежать ошибок при обмене:
Соответствие, 1С сама определяет тип данных, однако следите за тем, чтобы логические значения в 1С (Истина/Ложь) корректно транслировались в true/false.Content-Type: application/json. Это критически важно, так как принимающая сторона (например, API Почты России) ожидает именно этот формат данных.ЗаписьJSON.ЗаписатьИмяСвойства() напрямую, без промежуточных объектов Структура или Соответствие. Это дает полный контроль над итоговым результатом.Используя предложенные методы, вы сможете легко формировать любые JSON-запросы, даже если имена их ключей не соответствуют правилам именования переменных в языке 1С.