Преобразование текста JSON в дерево значений. УФ (8.3)

Программирование - Инструментарий

Последнее время часто начал сталкиваться с форматом  JSON, и возникла необходимость быстро анализировать те или иные данные в этом формате, отбрасывая ненужные, но при больших объёмах данных зачастую было сложно разобраться в структуре. Так что это обработка для тех, кто хочет увидеть JSON в читабельном виде (знаю, похожие обработки есть на Инфостарте, но для моих данных они все вываливались с ошибками). Обработка ни на что не претендует и сделана исключительно в целях сэкономить время для анализа JSON.

Обработка преобразовывает JSON в дерево значений. Работает на управляемых формах (8.3.11.2924).

Есть возможности:

  1. выбрать кодировку.
  2. считывать данные напрямую из файла. 
  3. считывать данные по ссылке (GET запрос).
  4. сразу на форме вставлять текст в формате JSON и преобразовывать его.

Из полезного по коду (по моему скромному мнению), вдруг кому пригодится:

Ниже представлен код рекурсивной функции, по преобразованию полученного массива данных JSON штатными средствами ("Новый ЧтениеJSON"), в дерево значений.

&НаСервере
Функция СформироватьДерево(НашаСтруктура,ТекущееДерево)
            
    Для каждого СтрокаСтруктуры из НашаСтруктура цикл    
        Если ТипЗнч(СтрокаСтруктуры)=Тип("КлючИЗначение") тогда
            ПодчиненнаяСтрока=ТекущееДерево.Строки.Добавить();
            ПодчиненнаяСтрока.Ключ=СтрокаСтруктуры.Ключ;    
            
            Если ТипЗнч(СтрокаСтруктуры.Значение)=Тип("Структура") или ТипЗнч(СтрокаСтруктуры.Значение)=Тип("Массив")  тогда            
                СформироватьДерево(СтрокаСтруктуры.Значение,ПодчиненнаяСтрока)
            Иначе
                ПодчиненнаяСтрока.Значение=СтрокаСтруктуры.Значение;          
            КонецЕсли;
        ИначеЕсли ТипЗнч(СтрокаСтруктуры)=Тип("Структура") или ТипЗнч(СтрокаСтруктуры)=Тип("Массив")  тогда    
                ПодчиненнаяСтрока=ТекущееДерево.Строки.Добавить();
                ПодчиненнаяСтрока.Ключ="Структура";    
               СформироватьДерево(СтрокаСтруктуры,ПодчиненнаяСтрока);
           Иначе
            ПодчиненнаяСтрока=ТекущееДерево.Строки.Добавить();
            ПодчиненнаяСтрока.Значение=СтрокаСтруктуры;       
        КонецЕсли;
    КонецЦикла;
    
КонецФункции

 

Где "НашаСтруктура" - структуры/массивы JSON. А "ТекущееДерево" - строка созданного дерева значений.

Соответственно перед вызовом данной рекурсии необходимо создать переменную с типо Дерево значений и передать первую строку, в моём примере, что бы она не была пустая, заполняю её текстовым значение "Структура".

 

   Дерево= новый ДеревоЗначений;
   Дерево.Колонки.Добавить("Ключ");
   Дерево.Колонки.Добавить("Значение");
   ВерхнийУровеньдерева=Дерево.Строки.Добавить();
   ВерхнийУровеньдерева.Ключ="Структура";    
   СформироватьДерево(НашиДанныеJSON,ВерхнийУровеньдерева);

 

Публикация первая, так что сильно не кричите.

Скачать файлы

Наименование Файл Версия Размер
Преобразования текста JSON в дерево значений. УФ (8.3):
.epf 8,38Kb
26.04.18
2
.epf 1.0 8,38Kb 2 Скачать

См. также

В этой теме еще нет сообщений.
Оставьте свое сообщение