Как получить значение по ключу из вложенного JSON в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как получить значение по ключу из вложенного JSON в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #35409
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        из json получено соответствие, в соответствии несколько уровней вложенности, нужно получить значение по ключу.

      • #35410
        bot_avaOdin — Одинэсник
        Участник

          Если у вас есть Соответствие, полученное из JSON, и оно содержит несколько уровней вложенности (т.е. значения по ключам могут быть тоже Соответствиями), то для получения значения по ключу на любом уровне нужно пройтись по вложенной структуре.

          Пример функции на 1С, которая рекурсивно ищет значение по ключу в глубине Соответствия:

          Функция НайтиЗначениеПоКлючу(СоответствиеОбъект, ИскомыйКлюч)
              Если Не ТипЗнч(СоответствиеОбъект) = Тип("Соответствие") Тогда
                  Возврат Неопределено;
              КонецЕсли;
          
              Если СоответствиеОбъект.Содержит(ИскомыйКлюч) Тогда
                  Возврат СоответствиеОбъект.Получить(ИскомыйКлюч);
              КонецЕсли;
          
              Для Каждого Ключ Из СоответствиеОбъект.Ключи Цикл
                  Значение = СоответствиеОбъект.Получить(Ключ);
                  Если ТипЗнч(Значение) = Тип("Соответствие") Тогда
                      Результат = НайтиЗначениеПоКлючу(Значение, ИскомыйКлюч);
                      Если Результат <> Неопределено Тогда
                          Возврат Результат;
                      КонецЕсли;
                  КонецЕсли;
              КонецЦикла;
          
              Возврат Неопределено;
          КонецФункции
          

          Пример использования:

          // Предположим, что Соответствие из JSON уже получено и называется Соотв
          Значение = НайтиЗначениеПоКлючу(Соотв, "нужныйКлюч");
          Если Значение <> Неопределено Тогда
              Сообщить("Значение найдено: " + Формат(Значение));
          Иначе
              Сообщить("Ключ не найден");
          КонецЕсли;
          

          Если структура более сложная и содержит массивы (Массивы), то нужно дополнительно обрабатывать элементы массива, проверяя, не является ли элемент тоже Соответствием или Массивом.

          Расширенный пример с обработкой массивов:

          Функция НайтиЗначениеПоКлючуРекурсивно(Объект, ИскомыйКлюч)
              Если ТипЗнч(Объект) = Тип("Соответствие") Тогда
                  Если Объект.Содержит(ИскомыйКлюч) Тогда
                      Возврат Объект.Получить(ИскомыйКлюч);
                  КонецЕсли;
                  Для Каждого Ключ Из Объект.Ключи Цикл
                      Результат = НайтиЗначениеПоКлючуРекурсивно(Объект.Получить(Ключ), ИскомыйКлюч);
                      Если Результат <> Неопределено Тогда
                          Возврат Результат;
                      КонецЕсли;
                  КонецЦикла;
              ИначеЕсли ТипЗнч(Объект) = Тип("Массив") Тогда
                  Для Каждого Элемент Из Объект Цикл
                      Результат = НайтиЗначениеПоКлючуРекурсивно(Элемент, ИскомыйКлюч);
                      Если Результат <> Неопределено Тогда
                          Возврат Результат;
                      КонецЕсли;
                  КонецЦикла;
              КонецЕсли;
          
              Возврат Неопределено;
          КонецФункции
          

          Таким образом, вы можете получить значение по ключу из глубоко вложенной структуры, полученной из JSON.

          Рекомендую посмотреть здесь:
          https://infostart.ru/public/1543922/ (пример работы с JSON и Соответствиями в 1С)
          https://infostart.ru/public/1998453/ (работа с иерархическими структурами и вложенными объектами)

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С