Как преобразовать массив структур из JSON в таблицу значений в 1С?

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

При работе с внешними API или импорте данных часто возникает ситуация, когда ПрочитатьJSON возвращает массив структур. В 1С такая структура данных не всегда удобна для анализа или вывода на форму, поэтому возникает логичный вопрос: как превратить этот массив в классическую ТаблицаЗначений для быстрого поиска и манипуляций?

Разбор проблемы и подходов к решению

Платформа 1С не имеет одной «магической» функции для мгновенного преобразования массива объектов JSON в ТаблицаЗначений, так как JSON является гибким форматом, а ТаблицаЗначений требует жесткой типизации колонок. Чтобы эффективно решить эту задачу, мы рассмотрим несколько проверенных подходов.

Решение через программное создание таблицы

Наиболее надежный способ — это написание универсальной функции, которая на основе первой структуры массива определит состав колонок и создаст таблицу. Разберем реализацию такой функции по шагам.

Для начала, проанализируем первый элемент массива: он станет «шаблоном» для колонок нашей будущей таблицы. Мы пройдемся циклом по ключам структуры и создадим соответствующие колонки в таблице, используя ОписаниеТиповПоТипу для правильной типизации.

Ниже представлен пример кода, который вы можете использовать в своей конфигурации:


Функция МассивВТаблицуЗначений(МассивСтруктур) Экспорт
    Таблица = Новый ТаблицаЗначений;
    Если ТипЗнч(МассивСтруктур) = Тип("Массив") И МассивСтруктур.Количество() <> 0 Тогда
        ПерваяСтруктура = МассивСтруктур[0];
        // Формируем колонки по первой структуре
        Для Каждого Свойство Из ПерваяСтруктура Цикл 
            Таблица.Колонки.Добавить(Свойство.Ключ, ОписаниеТиповПоТипу(ТипЗнч(Свойство.Значение)));
        КонецЦикла;
        
        // Заполняем данными
        Для Каждого Структура Из МассивСтруктур Цикл 
            НоваяСтрока = Таблица.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСтрока, Структура);
        КонецЦикла;
    КонецЕсли;
    Возврат Таблица;
КонецФункции

Оптимизация процесса чтения JSON

Если вы работаете с большими объемами данных, важно не только преобразовать результат, но и правильно его прочитать. Многие разработчики забывают, что ПрочитатьJSON поддерживает параметры, которые могут изменить структуру выходного объекта.

Важно: вы можете передать структуру параметров в метод ПрочитатьJSON. Установка свойства КлючиСтруктурыВСоответствие в значение Истина позволит получать Соответствие вместо Структуры. Это бывает полезно для динамического поиска ключей, если структура данных заранее не известна.

Когда стоит выбрать другие инструменты?

Рассмотрим другие сценарии для работы с данными:

  1. Потоковое чтение: Если JSON содержит тысячи записей, не пытайтесь распарсить его целиком в массив. Используйте объект ЧтениеJSON в цикле. Читайте данные по узлам и сразу добавляйте строки в ТаблицаЗначений. Это позволит сэкономить значительный объем оперативной памяти.
  2. Фабрика XDTO: Если ваш JSON строго типизирован и соответствует определенной схеме (например, описанной в XDTO-пакете), используйте ФабрикаXDTO.ПрочитатьJSON(). Платформа самостоятельно создаст объекты нужных типов, что зачастую работает быстрее, чем ручное создание колонок и перебор массива.
  3. Предопределенные колонки: Если вы знаете структуру данных заранее, создайте ТаблицаЗначений с нужными колонками вручную в конфигураторе или кодом, а затем просто заполняйте их методом ЗаполнитьЗначенияСвойств. Это всегда будет работать быстрее, чем динамическое создание описания типов в цикле.

Подводя итог, можно сказать, что хотя встроенного метода трансформации нет, создание собственной функции для обхода массива — это стандарт индустрии при разработке на 1С. Такой подход позволяет сохранить контроль над типами данных и гибко обрабатывать любые нестандартные структуры, приходящие из внешних систем. При необходимости использовать альтернативный подход с генерацией типов на лету можно применить метод динамического создания Фабрики XDTO для работы со схемами данных.

← На главную