При работе с внешними API и интеграциями программисты часто сталкиваются с ситуацией, когда стандартная сериализация объекта 1С (например, Структура или Соответствие) выдает JSON-объект, ограниченный фигурными скобками {}, в то время как принимающая сторона ожидает массив, обернутый в квадратные скобки [].
В этой статье мы подробно разберем, как правильно формировать такие структуры, проанализируем различные подходы — от самых простых до профессиональных — и выясним, какие технические нюансы платформы 1С:Предприятие 8 помогут сделать ваш код надежным и производительным.
Самый правильный и логичный способ получить квадратные скобки в JSON — это использовать высокоуровневую сериализацию объекта Массив. В 1С платформа автоматически интерпретирует Массив как коллекцию элементов, которая в формате JSON всегда обрамляется символами []. Даже если в массиве всего один элемент (ваше Соответствие или Структура), итоговая строка будет иметь нужный вид.
Давайте рассмотрим этот метод на конкретном примере кода:
// 1. Подготавливаем настройки записи
тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(тПараметрыJSON);
// 2. Создаем данные (объект)
СоответствиеJason = Новый Соответствие;
СоответствиеJason.Вставить("id", "9339101");
СоответствиеJason.Вставить("pipeline_id", 3959986);
СоответствиеJason.Вставить("status_id", 37773055);
// 3. Оборачиваем объект в массив
МассивСоответствий = Новый Массив;
МассивСоответствий.Добавить(СоответствиеJason);
// 4. Записываем весь массив целиком
ЗаписатьJSON(ЗаписьJSON, МассивСоответствий);
// 5. Получаем результат
СтрокаJS = ЗаписьJSON.Закрыть();
Почему это лучше? Используя этот метод, мы доверяем платформе 1С управление синтаксисом. Она сама расставит запятые, если элементов в массиве станет больше одного, и корректно обработает вложенность.
Иногда разработчики прибегают к простой конкатенации строк, добавляя символы "[" и "]" к уже сформированной строке JSON. Рассмотрим, как это выглядит в коде:
// Формируем обычный JSON объект
ЗаписатьJSON(ЗаписьJSON, СоответствиеJason);
СтрокаJS = ЗаписьJSON.Закрыть();
// Добавляем скобки вручную
СтрокаJS = "[" + СтрокаJS + "]";
Проанализируем ситуацию: на первый взгляд, это решение кажется гениально простым. Однако в профессиональной разработке такой подход считается «плохим тоном». Выясним причину:
Для формирования сложных структур или при работе с очень большими объемами данных, когда нельзя поместить все объекты в один Массив из-за ограничений оперативной памяти, следует использовать методы прямой записи. Этот подход позволяет нам «диктовать» платформе каждый шаг формирования файла.
Разберем процесс по шагам:
ЗаписьJSON.ЗаписатьНачалоМассива() — это принудительно ставит открывающую скобку [.ЗаписатьНачалоОбъекта() и ЗаписатьКонецОбъекта().ЗаписьJSON.ЗаписатьКонецМассива() — это ставит закрывающую скобку ].Такой потоковый метод гарантирует минимальное потребление памяти и максимальную гибкость управления структурой файла.
При работе с JSON в 1С недостаточно просто поставить скобки. Нужно учитывать несколько глубоких аспектов, которые влияют на то, как ваши данные будут восприняты другой системой.
В примере выше использовалось Соответствие. Важно понимать разницу:
id всегда шел первым, Соответствие может вас подвести, так как при сериализации порядок ключей случаен.Часто при передаче данных в JSON возникают ошибки с форматом даты. В 1С через ПараметрыЗаписиJSON можно настроить ВариантЗаписиДатыJSON. Рекомендуется использовать ВариантЗаписиДатыJSON.ISO, так как это международный стандарт, который понимают практически все современные веб-сервисы.
Если в вашей базе 1С поля называются на русском языке (например, ИдентификаторЗаказа), а API требует order_id, вам не обязательно переименовывать ключи вручную в коде. Можно использовать функцию преобразования имен свойств в настройках ПараметрыЗаписиJSON, которая будет автоматически менять названия полей в момент записи.
Если вам нужно передать в JSON не просто набор полей, а целый объект метаданных (например, документ или справочник), метод ЗаписатьJSON не справится напрямую. В этом случае мы сначала используем СериализаторXDTO, чтобы превратить объект 1С в структуру, пригодную для записи в JSON.
Мы выяснили, что наиболее надежным способом обернуть JSON в массив является использование объекта Массив, в который помещается ваше Соответствие. Это избавляет от ошибок ручного формирования строки и делает код понятным для других разработчиков. При работе с большими данными всегда отдавайте предпочтение Streaming API (методы ЗаписатьНачалоМассива), чтобы обеспечить высокую производительность системы.