При обмене данными с внешними сервисами, такими как amoCRM или другие REST API, разработчики часто сталкиваются с необходимостью формирования JSON-структур. Самая частая ошибка новичков — попытка собрать JSON вручную, объединяя строки и пытаясь правильно расставить кавычки и символы переноса строк. Это почти всегда приводит к ошибкам синтаксиса, с которыми не может работать принимающая сторона.
В данной статье мы разберем, как перестать «мучиться» с экранированием и научимся использовать встроенные механизмы платформы 1С для профессионального создания JSON-файлов.
Когда вы формируете JSON как обычную строку, вам приходится вручную управлять спецсимволами: кавычками ", обратными слэшами \ и переносами строк. Даже малейшая опечатка делает JSON невалидным. Вместо этого в 1С предусмотрены объекты Структура, Массив и Соответствие, которые при сериализации автоматически расставляют все необходимые символы согласно спецификации JSON.
Давайте рассмотрим, как правильно сформировать структуру, которая была предложена автором вопроса. Нам нужно создать объект, содержащий имя компании и массив пользовательских полей.
Для начала мы подготовим данные в виде объектов 1С:
Массив для хранения значений полей.Структуру для элемента поля, в которую помещаем field_id и массив значений.Структуру для всего объекта.Давайте проанализируем код, который позволит вам быстро и надежно создать нужный JSON. Мы будем использовать объект ЗаписьJSON.
ЗаписьДЖСОН = Новый ЗаписьJSON;
ЗаписьДЖСОН.УстановитьСтроку();
// Формируем внутренний массив значений
МассивВторогоУровня = Новый Массив;
МассивВторогоУровня.Добавить("11111111");
// Создаем структуру для поля
СтруктураВСтуктуре = Новый Структура();
СтруктураВСтуктуре.Вставить("field_id", 354313);
СтруктураВСтуктуре.Вставить("values", МассивВторогоУровня);
// Создаем основной массив для custom_fields_values
МассивПервогоУровня = Новый Массив;
МассивПервогоУровня.Добавить(СтруктураВСтуктуре);
// Собираем всё в корневую структуру
СтруктураДанных = Новый Структура();
СтруктураДанных.Вставить("name", "New company name");
СтруктураДанных.Вставить("custom_fields_values", МассивПервогоУровня);
// Записываем результат
ЗаписатьJSON(ЗаписьДЖСОН, СтруктураДанных);
СтрокаJSON = ЗаписьДЖСОН.Закрыть();
Типизация данных: Обратите внимание на field_id. В 1С, если вы передаете число, оно будет записано в JSON без кавычек. Если же ваш API требует, чтобы ID передавался обязательно в виде строки, принудительно приводите его к типу Строка при вставке в структуру: СтруктураВСтуктуре.Вставить("field_id", "354313");.
Массивы: Даже если у вас всего один элемент, внешние API требуют наличия массива (квадратные скобки []). Поэтому использование объекта Массив обязательно, даже для единственного значения.
Автоматизация сериализации: Если структура данных становится очень большой, вместо ручного создания множества структур можно использовать СериализаторXDTO или просто ЗаписатьJSON с уже заполненными коллекциями. Это защищает вас от ошибок в синтаксисе JSON и позволяет сосредоточиться на логике передачи данных.
Проверка результата: Всегда проверяйте полученную строку методом ПрочитатьJSON. Если метод не выдал исключение, значит, формат сформирован верно и его можно отправлять на сервер.
Таким образом, используя стандартные объекты Структура и Массив, вы навсегда забудете о проблемах с битыми JSON-файлами и сэкономите массу времени на отладке интеграций!