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

27.02.19

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Преобразование текста JSON в дерево значений. УФ (8.3):
.epf 8,43Kb ver:1.0.1
32
32 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

 

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

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

 

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

 

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

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

См. также

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

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

10000 руб.

02.09.2020    156230    847    398    

853

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 руб.

20.08.2024    6227    43    22    

53

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    22366    65    43    

113

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

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

10000 руб.

10.11.2023    9990    36    18    

61

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

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

22200 руб.

06.10.2023    14952    35    7    

70

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

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

4800 руб.

14.01.2013    186761    1134    0    

907

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    17061    6    32    

42

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

Программист - это человек, непрерывно принимающий решения. Написание кода не является процессом принятия решения - это всего лишь трансляция ваших желаний. Если вас периодически тяготит написание сотен строк кода ради решения задач, то прошу обратить внимание. Данный продукт позволит существенно сократить время на рутинные операции при разработке. За счет библиотечной реализации сокращается объём кода, а его читаемость повышается. К библиотеке прилагается документация API и шаблоны кода для наиболее популярных методов.

4200 руб.

16.04.2021    15308    6    10    

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

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