Пример обработки по преобразованию данных из формата json в удобный для обработки в 1С. Преобразуем json в тип данных «соответствие».
&НаКлиенте Процедура ПрочитатьФорматJson() //Если читаем файл: //Чтение = Новый ЧтениеJSON; //Чтение.ОткрытьФайл("g:test1.json"); //Данные = ПрочитатьJSON(Чтение, Ложь); //Чтение.Закрыть(); //Если читаем строку json Значение = "{ | ""brigada"": ""Бригада 1"", | ""gorod1"": ""Пермь"", | ""formed"": 2017, | ""members"": [ | { | ""name"": ""Иванов Иван"", | ""age"": 30, | ""id"": ""1"", | ""naviki"": [ | ""Навык 1"", | ""Навык 2"", | ""Навык 3"" | ] | }, | { | ""name"": ""Александра Смирнова"", | ""age"": 40, | ""id"": ""2"", | ""naviki"": [ | ""Навык 1"", | ""Навык 2"", | ""Навык 3"" | ] | }, | { | ""name"": ""Eternal Flame"", | ""age"": 1000000, | ""id"": ""Unknown"", | ""naviki"": [ | ""Навык 1"", | ""Навык 2"", | ""Навык 3"", | ] | } | ] |}"; Стандарт = Истина; ПредставленияСсылок = Ложь; //Попытка ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.Закрыть(); JsonСоответствие = JsonПреобразоватьВСоответствие(Значение); КонецПроцедуры &НаКлиенте Функция JsonПреобразоватьВСоответствие(Значение) ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Значение); JsonСоответствие = Неопределено; ПривестиКСоответствию(ЧтениеJSON, JsonСоответствие); ЧтениеJSON.Закрыть(); Возврат JsonСоответствие; КонецФункции &НаКлиенте Процедура ПривестиКСоответствию(ЧтениеJSON, JsonСоответствие) ИмяСвойства = Неопределено; Пока ЧтениеJSON.Прочитать() Цикл ТипТекЗнач = ЧтениеJSON.ТипТекущегоЗначения; Если ТипТекЗнач = ТипЗначенияJSON.НачалоОбъекта ИЛИ ТипТекЗнач = ТипЗначенияJSON.НачалоМассива Тогда ОбъектДанные = ?(ТипТекЗнач = ТипЗначенияJSON.НачалоОбъекта, Новый Соответствие, Новый Массив); Если ТипЗнч(JsonСоответствие) = Тип("Массив") Тогда JsonСоответствие.Добавить(ОбъектДанные); ИначеЕсли ТипЗнч(JsonСоответствие) = Тип("Соответствие") И ЗначениеЗаполнено(ИмяСвойства) Тогда JsonСоответствие.Вставить(ИмяСвойства, ОбъектДанные); КонецЕсли; ПривестиКСоответствию(ЧтениеJSON, ОбъектДанные); Если JsonСоответствие = Неопределено Тогда JsonСоответствие = ОбъектДанные; КонецЕсли; ИначеЕсли ТипТекЗнач = ТипЗначенияJSON.ИмяСвойства Тогда ИмяСвойства = ЧтениеJSON.ТекущееЗначение; ИначеЕсли ТипТекЗнач = ТипЗначенияJSON.Число ИЛИ ТипТекЗнач = ТипЗначенияJSON.Строка ИЛИ ТипТекЗнач = ТипЗначенияJSON.Булево ИЛИ ТипТекЗнач = ТипЗначенияJSON.Null Тогда Если ТипЗнч(JsonСоответствие) = Тип("Массив") Тогда JsonСоответствие.Добавить(ЧтениеJSON.ТекущееЗначение); ИначеЕсли ТипЗнч(JsonСоответствие) = Тип("Соответствие") Тогда JsonСоответствие.Вставить(ИмяСвойства, ЧтениеJSON.ТекущееЗначение); КонецЕсли; Иначе Возврат; КонецЕсли; КонецЦикла; КонецПроцедуры
Если поставить точку останова на строку со значением JsonСоответствие — увидим следующую картину:
Данные записались в соответствие в виде дерева, ветви которого представлены в виде массивов.
Оставить комментарий