База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как получить значение по ключу из вложенного JSON в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 месяц, 2 недели назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
30 декабря 2025 в 13:15 #35409
из json получено соответствие, в соответствии несколько уровней вложенности, нужно получить значение по ключу.
-
30 декабря 2025 в 13:15 #35410
Если у вас есть Соответствие, полученное из JSON, и оно содержит несколько уровней вложенности (т.е. значения по ключам могут быть тоже Соответствиями), то для получения значения по ключу на любом уровне нужно пройтись по вложенной структуре.
Пример функции на 1С, которая рекурсивно ищет значение по ключу в глубине Соответствия:
1С (Код)123456789101112131415161718192021Функция НайтиЗначениеПоКлючу(СоответствиеОбъект, ИскомыйКлюч)Если Не ТипЗнч(СоответствиеОбъект) = Тип("Соответствие") ТогдаВозврат Неопределено;КонецЕсли;Если СоответствиеОбъект.Содержит(ИскомыйКлюч) ТогдаВозврат СоответствиеОбъект.Получить(ИскомыйКлюч);КонецЕсли;Для Каждого Ключ Из СоответствиеОбъект.Ключи ЦиклЗначение = СоответствиеОбъект.Получить(Ключ);Если ТипЗнч(Значение) = Тип("Соответствие") ТогдаРезультат = НайтиЗначениеПоКлючу(Значение, ИскомыйКлюч);Если Результат <> Неопределено ТогдаВозврат Результат;КонецЕсли;КонецЕсли;КонецЦикла;Возврат Неопределено;КонецФункцииПример использования:
1С (Код)1234567// Предположим, что Соответствие из JSON уже получено и называется СоотвЗначение = НайтиЗначениеПоКлючу(Соотв, "нужныйКлюч");Если Значение <> Неопределено ТогдаСообщить("Значение найдено: " + Формат(Значение));ИначеСообщить("Ключ не найден");КонецЕсли;Если структура более сложная и содержит массивы (Массивы), то нужно дополнительно обрабатывать элементы массива, проверяя, не является ли элемент тоже Соответствием или Массивом.
Расширенный пример с обработкой массивов:
1С (Код)12345678910111213141516171819202122Функция НайтиЗначениеПоКлючуРекурсивно(Объект, ИскомыйКлюч)Если ТипЗнч(Объект) = Тип("Соответствие") ТогдаЕсли Объект.Содержит(ИскомыйКлюч) ТогдаВозврат Объект.Получить(ИскомыйКлюч);КонецЕсли;Для Каждого Ключ Из Объект.Ключи ЦиклРезультат = НайтиЗначениеПоКлючуРекурсивно(Объект.Получить(Ключ), ИскомыйКлюч);Если Результат <> Неопределено ТогдаВозврат Результат;КонецЕсли;КонецЦикла;ИначеЕсли ТипЗнч(Объект) = Тип("Массив") ТогдаДля Каждого Элемент Из Объект ЦиклРезультат = НайтиЗначениеПоКлючуРекурсивно(Элемент, ИскомыйКлюч);Если Результат <> Неопределено ТогдаВозврат Результат;КонецЕсли;КонецЦикла;КонецЕсли;Возврат Неопределено;КонецФункцииТаким образом, вы можете получить значение по ключу из глубоко вложенной структуры, полученной из JSON.
Рекомендую посмотреть здесь:
https://infostart.ru/public/1543922/ (пример работы с JSON и Соответствиями в 1С)
https://infostart.ru/public/1998453/ (работа с иерархическими структурами и вложенными объектами)
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.