1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-02-03 13:22:19 +02:00

Доработка функции РазложитьJSON

This commit is contained in:
Anton Titovets 2024-04-11 08:51:34 +03:00
parent c0c7ea5735
commit 43a839b7cd
2 changed files with 26 additions and 5 deletions

View File

@ -279,7 +279,6 @@
Процедура ОпределитьДопОписание(ДопОписание, Модуль)
НачалоПараметров = Ложь;
ЕстьМассив = Ложь;
ЕстьДата = Ложь;
ТекстДополнения = "";

View File

@ -15,7 +15,10 @@
//
// Возвращаемое значение:
// Строка - пустая строка
Функция РазложитьJSON(Знач JSON, Знач МаксимальныйУровеньВложенности = 0, Знач ИмяПараметра = "", Знач Кодировка = "UTF-8") Экспорт
Функция РазложитьJSON(Знач JSON
, Знач МаксимальныйУровеньВложенности = 0
, Знач ИмяПараметра = ""
, Знач Кодировка = "UTF-8") Экспорт
МаксимальнаяВложенность = МаксимальныйУровеньВложенности;
ИскомыйПараметр = ИмяПараметра;
@ -61,7 +64,11 @@
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗначенияРекурсивно(Знач JSON, Знач Префикс = "", Знач ТекущаяВложенность = 1)
Функция ПолучитьЗначенияРекурсивно(Знач JSON, Знач Префикс = "", Знач ТекущаяВложенность = 1, СоответствиеПолей = "")
Если Не ЗначениеЗаполнено(СоответствиеПолей) Тогда
СоответствиеПолей = Новый Соответствие;
КонецЕсли;
ВозвращаемоеЗначение = "";
@ -75,7 +82,19 @@
СледующаяВложенностьДоступна = МаксимальнаяВложенность = 0 Или СледующаяВложенность <= МаксимальнаяВложенность;
Если Не ЭтоКоллекция Или Не СледующаяВложенностьДоступна Тогда
ПеременнаяСреды = Ключ;
Дублирования = СоответствиеПолей.Получить(Ключ);
Если Дублирования = Неопределено Тогда
Счетчик = 0;
ПеременнаяСреды = Ключ;
Иначе
Счетчик = Дублирования + 1;
ПеременнаяСреды = Ключ + СтрЗаменить(Строка(Дублирования), Символы.НПП, "");
КонецЕсли;
СоответствиеПолей.Вставить(Ключ, Счетчик);
ПолучитьСтроку(Значение);
Если Не ЗначениеЗаполнено(ИскомыйПараметр) Тогда
@ -91,7 +110,10 @@
КонецЕсли;
Иначе
НовыйПрефикс = Ключ + "_";
ВозвращаемоеЗначение = ПолучитьЗначенияРекурсивно(Значение, НовыйПрефикс, СледующаяВложенность);
ВозвращаемоеЗначение = ПолучитьЗначенияРекурсивно(Значение
, НовыйПрефикс
, СледующаяВложенность
, СоответствиеПолей);
Если ЗначениеЗаполнено(ВозвращаемоеЗначение) Тогда
Прервать;