Имя: Пароль:
1C
1С v8
Преобразование массива структур в таблицу значений
0 NordMad
 
19.04.21
18:47
Добрый вечер, интересует такой вопрос: читал строку JSON таким вот образом

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

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