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

27.02.19

Разработка - Инструментарий разработчика

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

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

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

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

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

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

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

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

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

 

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

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

 

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

 

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

Обработка JSON ДеревоЗначений

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122177    670    389    

714

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 15300 руб.

06.10.2023    7297    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3544    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177758    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99348    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

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

3000 руб.

27.08.2019    18116    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28111    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23605    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 27.04.18 03:54
Сообщение было скрыто модератором.
...
2. Fedor02 15.06.18 00:13 Сейчас в теме
Добрый день, вы написал "знаю, похожие обработки есть на Инфостарте, но для моих данных они все вываливались с ошибками" , чем ваша обработка отличается от существующих, и на сколько ваша обработка является универсальной и подходит для данных разной структуры?
3. burni4 87 15.06.18 09:24 Сейчас в теме
(2) что вы подразумеваете под данными разных структур? у JSON одна структура. По поводу обработок на инфостарте, похожую нашел вот эту
https://infostart.ru/public/696196/
и введя свои данные в формате JSON получил ошибку, о чем и отписался в данной теме, поэтому и решил написать свою.
4. uno-c 234 26.02.19 23:21 Сейчас в теме
Правильно ли понял, что Ваша обработка не осилит подобный json из-за ключей с пробелами и начинающихся с цифр? {"12979128":{"сделка":{1с_id":12979128,"менеджер":"v@","способ оплаты":"prepayment","контрагент партнёра": ... " и тд. Не осилит, поскольку преобразует json в структуру для дальнейшей работы.
5. burni4 87 27.02.19 10:29 Сейчас в теме
(4) спасибо за замечание, исправил статью, перезалил обработку.
6. uno-c 234 03.06.19 07:46 Сейчас в теме
вот так с нумерацией элементов массива:
&НаСервере
Функция СформироватьПодстрокиДерева(ИтераторИзJson, ТекущаяСтрокаДерева, ИндексЭлементаМассива = 0)
	Для каждого Элемент из ИтераторИзJson цикл	
		ДочерняяСтрокаДерева=ТекущаяСтрокаДерева.Строки.Добавить();
		//у типа итератора только два варианта: массив или соответствие
		Если ТипЗнч(ИтераторИзJson) = Тип("Массив") Тогда 
			ДочерняяСтрокаДерева.Ключ = "[" + ИндексЭлементаМассива + "]";
			ИндексЭлементаМассива = ИндексЭлементаМассива + 1;
			Значение = Элемент;//элементы массива: примитивы, соответствия, массивы
		Иначе //итератор - соответствие, элементы - ключ и значение
			ДочерняяСтрокаДерева.Ключ = Элемент.Ключ;
			Значение = Элемент.Значение;//значения: примитивы, соответствия, массивы
		КонецЕсли;
		Если ТипЗнч(Значение)=Тип("Соответствие") Тогда
			ДочерняяСтрокаДерева.Значение="{" + Значение.Количество() +"}";
			ДочерняяСтрокаДерева.Тип = "Запись";
			СформироватьПодстрокиДерева(Значение, ДочерняяСтрокаДерева);
		ИначеЕсли ТипЗнч(Значение)=Тип("Массив") Тогда
			ДочерняяСтрокаДерева.Значение="[" + Значение.Количество() + "]";
			ДочерняяСтрокаДерева.Тип = "Массив";
			СформироватьПодстрокиДерева(Значение, ДочерняяСтрокаДерева);
		Иначе //примитив
			ДочерняяСтрокаДерева.Значение=Значение;
			ДочерняяСтрокаДерева.Тип = ТипЗнч(Значение);
		КонецЕсли;
	КонецЦикла;
КонецФункции

&НаСервере
Процедура ЗаполнитьДеревоЖсон()
	ЧтениеЖсон = Новый ЧтениеJSON;
	ЧтениеЖсон.УстановитьСтроку(ОтветСервера);
	СоответствиеИзJson = ПрочитатьJSON(ЧтениеЖсон, Истина);
	
	Дерево= новый ДеревоЗначений;
	Дерево.Колонки.Добавить("Ключ");
	Дерево.Колонки.Добавить("Значение");
	Дерево.Колонки.Добавить("Тип");
	ВерхнийУровеньдерева=Дерево.Строки.Добавить();
	ВерхнийУровеньдерева.Ключ="Дерево JSON";    
	СформироватьПодстрокиДерева(СоответствиеИзJson, ВерхнийУровеньдерева);
	ЗначениеВРеквизитФормы(Дерево,"ДеревоЖсон");
КонецПроцедуры
Показать
Vyacheslide; Neitron4ik; Blacksli1; Fikus01; Aleskey_K; +5 Ответить
Оставьте свое сообщение