Каталог решений - Преобразование дерева значений в структуру

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

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

В наличии

Функция преобразования дерева значений в структуру.
В обработке пример работы функции.

Категория:

Описание

Стояла задача преобразования дерева значений в структуру. Это нужно для преобразования данных в json и удобного визуального восприятия.

Первый вариант, без промежуточного преобразования в структуру, сразу в json (он не подошел):

  ДеревоЗначений = Новый ДеревоЗначений; // Наше дерево
  
  ЗаписьJSON = Новый ЗаписьJSON;
  ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
  ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
  СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, ДеревоЗначений);
  Результат = ЗаписьJSON.Закрыть();

Результат:

  {
  	"#value": {
  		"column": [
  			{
  				"Name": {
  					"#type": "jxs:string",
  					"#value": "ИмяФайла"
  				},
  				"ValueType": {
  					"Type": [
  						"{http://www.w3.org/2001/XMLSchema}string"
  					],
  					"StringQualifiers": {
  						"Length": 0,
  						"AllowedLength": "Variable"
  					}
  				}
  			},
  			{
  				"Name": {
  					"#type": "jxs:string",
  					"#value": "ИндексКартинки"
  				},
  				"ValueType": {
  					"Type": [
  						"{http://www.w3.org/2001/XMLSchema}decimal"
  					],
  					"NumberQualifiers": {
  						"Digits": 10,
  						"FractionDigits": 0,
  						"AllowedSign": "Nonnegative"
  					}
  				}
  			},
  			{
  				"Name": {
  					"#type": "jxs:string",
  					"#value": "ПолноеИмя"
  				},
  				"ValueType": {
  					"Type": [
  						"{http://www.w3.org/2001/XMLSchema}string"
  					],
  					"StringQualifiers": {
  						"Length": 0,
  						"AllowedLength": "Variable"
  					}
  				}
  			}
  		],
  		"row": [
  			{
  				"row": [
  					{
  						"Value": [
  							"Строка 2",
  							0,
  							"Имя 1"
  						]
  					},
  					{
  						"Value": [
  							"Строка 3",
  							0,
  							"Имя 2"
  						]
  					}
  				],
  				"Value": [
  					"Строка 1",
  					0,
  					""
  				]
  			},
  			{
  				"Value": [
  					"Строка 5",
  					0,
  					""
  				]
  			}
  		]
  	}
  }

Отказался от данного варианта, т.к. сложно воспринимать текст файл и работать с ним в других системах.

Второй вариант написан самостоятельно:

  // Произвольная функция
  Функция ОсновнаяФункция(ДеревоЗначений)
  	
  	// ДеревоЗначений - ваше значение тип "ДеревоЗначений" для преобразования
  		
  	СтруктураДерева = Новый Структура();
  	
  	ДеревоВСтруктуру(ДеревоЗначений.Строки, СтруктураДерева);
  
     	ЗаписьJSON = Новый ЗаписьJSON;
  	ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
  	ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
  	ЗаписатьJSON(ЗаписьJSON, СтруктураДанных);
  	Результат = ЗаписьJSON.Закрыть();
  
  КонецФункции
  
  // Функция преобразования
  Функция ДеревоВСтруктуру(СтрокиДерева, СтруктураДерева)
  
  	МассивСтрок = Новый Массив();
  	
  	Для Каждого Строка Из СтрокиДерева Цикл
  				
  		ДанныеСтроки = СтрокаТаблицыЗначенийВСтруктуру(Строка);
  		ДанныеСтроки.Вставить("Строки", Новый Структура);
  		
  		ДеревоВСтруктуру(Строка.Строки, ДанныеСтроки);	
  		
  		МассивСтрок.Добавить(ДанныеСтроки);
  		
  	КонецЦикла;
  	
  	СтруктураДерева.Вставить("Строки", МассивСтрок);
  	
  КонецФункции
  
  // Взято из БСП (вынес отдельно)
  Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт
  	
  	Структура = Новый Структура;
  	Для каждого Колонка Из СтрокаТаблицыЗначений.Владелец().Колонки Цикл
  		Структура.Вставить(Колонка.Имя, СтрокаТаблицыЗначений[Колонка.Имя]);
  	КонецЦикла;
  	
  	Возврат Структура;
  	
  КонецФункции
  

Результат:

  {
  	"Строки": [
  		{
  			"ИмяФайла": "Строка 1",
  			"ИндексКартинки": 0,
  			"ПолноеИмя": "",
  			"Строки": [
  				{
  					"ИмяФайла": "Строка 2",
  					"ИндексКартинки": 0,
  					"ПолноеИмя": "Имя 1",
  					"Строки": []
  				},
  				{
  					"ИмяФайла": "Строка 3",
  					"ИндексКартинки": 0,
  					"ПолноеИмя": "Имя 2",
  					"Строки": []
  				}
  			]
  		},
  		{
  			"ИмяФайла": "Строка 5",
  			"ИндексКартинки": 0,
  			"ПолноеИмя": "",
  			"Строки": []
  		}
  	]
  }

Ограничения: работает с простыми типами.

Платформа 8.3.14.

Позже нашел разработку, но на нее нет ссылок при запросе "Дерево в структуру": 

https://github.com/arkuznetsov/SerLib1C

has been added to your cart:
Оформление заказа