Как передать в JSON ключи с дефисом из 1С:Предприятие?

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

При интеграции с внешними API, такими как сервисы Почты России, разработчики часто сталкиваются с форматом JSON, где имена ключей содержат символы, недопустимые для имен свойств объекта Структура в 1С (например, дефисы). Попытка создать Структура с ключом "index-to" вызывает ошибку платформы: «Задано неправильное имя атрибута структуры».

Давайте разберемся, как правильно подготовить данные для отправки HTTP-запроса, чтобы обойти это ограничение и корректно сформировать тело запроса.

Использование объекта Соответствие

Самый простой и эффективный способ обойти ограничение на имена атрибутов — заменить объект Структура на Соответствие. В отличие от Структура, Соответствие позволяет использовать любые строковые значения в качестве ключей, включая дефисы, пробелы и другие спецсимволы.

Рассмотрим по шагам, как подготовить такой запрос:

  1. Создаем Соответствие вместо Структура.
  2. Заполняем его необходимыми данными, используя строковые ключи.
  3. Сериализуем полученное Соответствие в строку 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(Запись, тДанные);
СтрокаJSON = Запись.Закрыть();

HTTPЗапрос = Новый HTTPЗапрос("/v1/api/method");
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");

Соединение = Новый HTTPСоединение("адрес.сервера.ru", 443, , , Новый ЗащищенноеСоединениеOpenSSL());
Результат = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

Основные рекомендации

При работе с JSON в 1С важно учитывать несколько нюансов, которые помогут избежать ошибок при обмене:

Используя предложенные методы, вы сможете легко формировать любые JSON-запросы, даже если имена их ключей не соответствуют правилам именования переменных в языке 1С.

← На главную