Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Преобразование массива структур в таблицу значений

Преобразование массива структур в таблицу значений
Я
   NordMad
 
19.04.21 - 18:47
Добрый вечер, интересует такой вопрос: читал строку JSON таким вот образом

Функция ИзСтрокиВJSON(СтрокаОтвета)//Экспорт
    ЧтениеJSON = Новый ЧтениеJSON();
    ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);
    ОтветВJSON=ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    Возврат ОтветВJSON;
КонецФункции  

В результате получил структуру, некоторые атрибуты которой распарсились в массив структур типа: (имя; значение). Что достаточно неудобно в смысле поиска. Непонятно почему не считывается соответствием. Вопрос, как можно такую структуру преобразовать в соответствие или таблицу значений для быстрого поиска? или может быть как то иначе можно прочитать строку JSON исходную
   NordMad
 
1 - 19.04.21 - 18:48
(0) понятно что циклами можно, вопрос в том - можно это как то сделать оптимально? структура получилась большая и таких вот атрибутов -массивов в ней много
   Chameleon1980
 
2 - 19.04.21 - 19:09
там, вроде каким-то параметром указывается, что
читать в соответствие
   NordMad
 
3 - 19.04.21 - 19:10
(2) ОтветВJSON=ПрочитатьJSON(ЧтениеJSON); здесь?
   acht
 
4 - 19.04.21 - 19:18
(3) Давно бы уже синтакс-помощник открыл.
   novichok79
 
5 - 19.04.21 - 19:58
// Возвращает таблицу значений на основании массива структур

// 
// Параметры:

//    МассивСтруктур - МассивСтруктур - массив структур, которые будут преобразованы в таблиц значений.
//                                        Свойства структуры первого элемента массива определяют состав колонок результирующей таблицы.

//
// Возвращаемое значение:

//    ТаблицаЗначений - таблица значений, созданная из массива структур.
// 

Функция МассивВТаблицуЗначений(МассивСтруктур) Экспорт
    Таблица = Новый ТаблицаЗначений;
    // Создадим колонки по первой структуре массива

    Если ТипЗнч(МассивСтруктур) = Тип("Массив")
        И МассивСтруктур.Количество() <> 0 Тогда
        ПерваяСтруктура = МассивСтруктур[0];
        Для Каждого Свойство Из ПерваяСтруктура Цикл 
            Таблица.Колонки.Добавить(Свойство.Ключ, ОписаниеТиповПоТипу(ТипЗнч(Свойство.Значение)));
        КонецЦикла;
        
        Для Каждого Структура Из МассивСтруктур Цикл 
            НоваяСтрока = Таблица.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСтрока, Структура);
        КонецЦикла;
    КонецЕсли;
    
    Возврат Таблица;
КонецФункции
   novichok79
 
6 - 19.04.21 - 20:03
(1) через какие-нибудь преобразования json-строки можно перевести в что-то подобное СериализаторXDTO.ЗаписатьJSON, а затем сделать СериализаторXDTO.ПрочитатьJSON. но непонятно что будет быстрее - ё**бля со строкой или перевод вышеописанной функцией. чуваки, которые писали ERP выбрали последний вариант, научитесь уже пользоваться глобальным поиском по конфигурации, найдете много интересного.
   NordMad
 
7 - 19.04.21 - 22:25
(4) а подробнее? я не нашел
   NordMad
 
8 - 19.04.21 - 22:28
(6) ну так получается что вы то тоже нашли только вариант обхода массива циклами. Это итак понятно что можно сделать, но выглядит громоздко. В том то и заключался вопрос - есть ли способ сделать это оптимально, например сразу при чтении строки JSON получить вместо массива структур соответствие, или возможно средствами платформы сделать преобразование.
   novichok79
 
9 - 19.04.21 - 23:17
(8) как я помню - 1С не предоставляет способа конвертации набора значений, он дает повесить только свои обработчики при чтении JSON, а на выходе все равно получается структура или соответствие.
можно взять полученное из ПрочитатьJSON соответствие, сериализовать в XML, потом натравить ПреобразованиеXSL на него, потом прочитать обратно в объект - получится таблица значений. в любом случае, придется помучаться.
   novichok79
 
10 - 19.04.21 - 23:18
   vde69
 
11 - 20.04.21 - 07:27
JSON нужен правильный объект и каждый элемент массив
   NordMad
 
12 - 20.04.21 - 09:36
(9) выходит что такой вариант тоже танцы с бубнами..

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.