Перем МаксимальнаяВложенность; #Область СлужебныйПрограммныйИнтерфейс Процедура ЗаполнитьПараметрыОкружения(Знач JSON, Знач МаксимальныйУровеньВложенности = 0, Знач Префикс = "jenva") Экспорт МаксимальнаяВложенность = МаксимальныйУровеньВложенности; Префикс = Префикс + "_"; Если ТипЗнч(JSON) = Тип("Строка") Тогда НормализоватьТекстовыйВвод(JSON); КонецЕсли; ПолучитьКоллекцию(JSON); Если Не ТипЗнч(JSON) = Тип("Соответствие") Тогда ВызватьИсключение "Ошибка преобразовани данных параметра JSON"; КонецЕсли; ПрисвоитьЗначенияРекурсивно(JSON, Префикс); КонецПроцедуры #КонецОбласти Процедура ПрисвоитьЗначенияРекурсивно(Знач JSON, Знач Префикс, Знач ТекущаяВложенность = 1) Для Каждого Пара Из JSON Цикл Значение = Пара.Значение; Ключ = Строка(Пара.Ключ); ЭтоКоллекция = Не ТипЗнч(Значение) = Тип("Соответствие") И Не ТипЗнч(Значение) = Тип("Структура"); СледующаяВложенность = ТекущаяВложенность + 1; СледующаяВложенностьДоступна = МаксимальнаяВложенность = 0 Или СледующаяВложенность <= МаксимальнаяВложенность; Если Не ЭтоКоллекция Или Не СледующаяВложенностьДоступна Тогда ПеременнаяСреды = Префикс + Ключ; ПолучитьСтроку(Значение); УстановитьПеременнуюСреды(ПеременнаяСреды, Значение); Сообщить("$" + ПеременнаяСреды + " = " + Значение); Иначе НовыйПрефикс = Префикс + Ключ + "_"; ПрисвоитьЗначенияРекурсивно(Значение, НовыйПрефикс, СледующаяВложенность); КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ПолучитьСтроку(Значение) ЭтоКоллекция = ТипЗнч(Значение) = Тип("Соответствие") Или ТипЗнч(Значение) = Тип("Структура") Или ТипЗнч(Значение) = Тип("Массив"); Если ЭтоКоллекция Тогда ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows , " " , Истина , Истина , Ложь , Ложь , Ложь , Ложь); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); ЗаписатьJSON(ЗаписьJSON, Значение); Значение = ЗаписьJSON.Закрыть(); Иначе Значение = Строка(Значение); КонецЕсли; КонецПроцедуры Процедура ПолучитьКоллекцию(Значение) Если Значение = Неопределено Тогда Возврат; КонецЕсли; ИсходноеЗначение = Значение; Если ЭтоКоллекция(Значение) Тогда Возврат; Иначе Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение); Иначе Значение = Строка(Значение); КонецЕсли; Файл = Новый Файл(Значение); ЧтениеJSON = Новый ЧтениеJSON; Если Файл.Существует() Тогда ЧтениеJSON.ОткрытьФайл(Значение); ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда ИВФ = ПолучитьИмяВременногоФайла(); КопироватьФайл(Значение, ИВФ); ЧтениеJSON.ОткрытьФайл(ИВФ); ЧтениеJSON.Прочитать(); УдалитьФайлы(ИВФ); Иначе ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение)); КонецЕсли; Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO); ЧтениеJSON.Закрыть(); КонецЕсли; КонецПроцедуры Процедура НормализоватьТекстовыйВвод(Знач Текст) НачальнаяФигурная = СтрНайти(Текст, "{"); НачальнаяКвадратная = СтрНайти(Текст, "["); ПоследняяФигурная = СтрНайти(Текст, "}", НаправлениеПоиска.СКонца); ПоследняяКвадратная = СтрНайти(Текст, "]", НаправлениеПоиска.СКонца); Если НачальнаяФигурная = 0 И НачальнаяКвадратная = 0 Тогда Возврат; КонецЕсли; Фигурные = НачальнаяФигурная < НачальнаяКвадратная И НачальнаяФигурная <> 0 Или НачальнаяКвадратная = 0; ПервыйСимвол = ?(Фигурные, НачальнаяФигурная, НачальнаяКвадратная); ПоследнийСимвол = ?(Фигурные, ПоследняяФигурная, ПоследняяКвадратная); Текст = Сред(Текст, ПервыйСимвол, ПоследнийСимвол - ПервыйСимвол + 1); КонецПроцедуры Функция ЭтоКоллекция(Знач Значение) Возврат ТипЗнч(Значение) = Тип("Массив") Или ТипЗнч(Значение) = Тип("Структура") Или ТипЗнч(Значение) = Тип("Соответствие"); КонецФункции