Как использовать XPATH для возврата массива значений на основе условия, что определенное свойство существует в массиве объектов JSON

Как я могу использовать XPATH для возврата массива на основе существования определенного свойства? Ниже приведен раздел моего файла JSON. Под «корнем» находится ряд объектов массива, и НЕКОТОРЫЕ из них содержат свойство «обнаружение». Я хотел бы получить «service_name» каждого объекта массива ТОЛЬКО ЕСЛИ массив объектов (под корнем) содержит свойство «обнаружение».

например, "service_name": должно быть возвращено "IPS"

но для приведенного ниже примера имя_службы НЕ ДОЛЖНО возвращаться, поскольку свойство «обнаружение» отсутствует.

Наконец, есть ли способ объединить приведенный выше запрос в один, чтобы вернуть массив значений «имя_службы» и «обнаружение» вместе на основе одного и того же условия?

Моя текущая команда Power Automate Set Variable:

xpath(xml(variables('varProductsRoot')), '//detection | //service_name')

и, к сожалению, он возвращает ВСЕ имена_служб, даже если компонент, к которому они принадлежат, не содержит свойства «обнаружение».

Ниже приведен пример моего файла JSON, который я пытаюсь проанализировать.

{
  "root": {
    "fg": [
      {
        "product_name": "fg",
        "remediation": {
          "type": "package",
          "packages": [
            {
              "service": "ips",
              "service_name": "IPS",
              "description": "Detects and Blocks attack attempts",
              "kill_chain": {
                "step": "Exploitation"
              },
              "link": "https://fgd.fnet.com/updates",
              "minimum_version": "22.414"
            }
          ]
        },
        "detection": {
          "attackid": [
            51006,
            50825
          ]
        }
      }
    ],
    "fweb": [
      {
        "product_name": "fWeb",
        "remediation": {
          "type": "package",
          "packages": [
            {
              "service": "waf",
              "service_name": "Web App Security",
              "description": "Detects and Blocks attack attempts",
              "kill_chain": {
                "step": "Exploitation"
              },
              "link": "https://fgd.fnet.com/updates",
              "minimum_version": "0.00330"
            }
          ]
        },
        "detection": {
          "signature_id": [
            "090490119",
            "090490117"
          ]
        }
      }
    ],
    "fcl": [
      {
        "product_name": "fcl",
        "remediation": {
          "type": "package",
          "packages": [
            {
              "service": "vuln",
              "service_name": "Vulnerability",
              "description": "Detects and Blocks attack attempts",
              "kill_chain": {
                "step": "Delivery"
              },
              "link": "https://fgd.fnet.com/updates",
              "minimum_version": "1.348"
            }
          ]
        },
        "detection": {
          "vulnid": [
            69887,
            2711
          ]
        }
      },
      {
        "product_name": "fcl",
        "remediation": {
          "type": "package",
          "packages": [
            {
              "service": "ob-detect",
              "service_name": "ob Detection",
              "kill_chain": {
                "step": "sm/SOAR"
              },
              "link": "https://www.fgd.com/services",
              "minimum_version": "1.003"
            }
          ]
        }
      }
    ],
    "fss": [
      {
        "product_name": "fss",
        "remediation": {
          "type": "package",
          "packages": [
            {
              "service": "ips",
              "service_name": "IPS",
              "description": "Detects and Blocks attack attempts",
              "kill_chain": {
                "step": "Exploitation"
              },
              "link": "https://fgd.fnet.com/updates",
              "minimum_version": "22.414"
            }
          ]
        }
      }
    ],
    "fadc": [
      {
        "product_name": "fADC",
        "remediation": {
          "type": "package",
          "packages": [
            {
              "service": "ips",
              "service_name": "IPS",
              "description": "Detects and Blocks attack attempts",
              "kill_chain": {
                "step": "Exploitation"
              },
              "link": "https://fgd.fnet.com/updates",
              "minimum_version": "22.414"
            }
          ]
        },
        "detection": {
          "ips_rulename": [
            "Error.Log.Remote.Code.Execution",
            "Server.cgi-bin.Path.Traversal"
          ]
        }
      },
      {
        "product_name": "fADC",
        "remediation": {
          "type": "package",
          "packages": [
            {
              "service": "waf",
              "service_name": "Web App Security",
              "description": "Detects and Blocks attack attempts",
              "kill_chain": {
                "step": "Exploitation"
              },
              "link": "https://fgd.fnet.com/updates",
              "minimum_version": "1.00038"
            }
          ]
        },
        "detection": {
          "sigid": [
            1002017267,
            1002017273
          ]
        }
      }
    ],
    "fsm": [
      {
        "product_name": "fsm",
        "remediation": {
          "type": "package",
          "packages": [
            {
              "service": "ioc",
              "service_name": "IOC",
              "kill_chain": {
                "step": "sm/SOAR"
              },
              "link": "https://www.fgd.com/services",
              "minimum_version": "0.02355"
            }
          ]
        }
      }
    ]
  }
}

Заранее спасибо, Никос

Не могли бы вы опубликовать свой json AS TEXT, чтобы мы могли дать вам правильный ответ?

Skin 25.11.2022 20:55

Привет @Skin, я только что обновил свой пост с образцом JSON. Спасибо

sugarakis 25.11.2022 21:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это сработает для вас. Я разбил его на три этапа для удобства...

Шаг 1

Он содержит ваш JSON, как вы указали. Переменная определяется как Object.

Шаг 2

Инициализируйте строковую переменную, содержащую следующее выражение...

xml(variables('JSON'))

... который (как вы знаете) преобразует JSON в XML.

Шаг 3

Это переменная Array, которая будет извлекать значения всех элементов service_name, где существует элемент detection, используя следующее выражение...

xpath(xml(variables('XML')), '//detection/..//service_name/text()')

Результат

Вуаля! У вас есть значения в массиве.

Отличный ответ! Очень хорошо описано. Большое спасибо :)

sugarakis 25.11.2022 23:18

Другие вопросы по теме

Асинхронный метод оболочки С# не выполняет метод AX 2012, но синхронизация работает
Вызов MS Power Automate из функции Azure TypeScript
Вставка пользователя через пакетную отправку HTTP-запроса Sharepoint
Как отправить сообщение самому себе с помощью PowerAutomate?
Получение ошибки аутентификации при использовании «Отправить HTTP-запрос в DevOps» из LogicApp
Сценарий Office — разделение строк в векторе и использование динамического адреса ячейки — запуск сценария Excel из Power Automate
Power Automate — нужна помощь в сортировке массива на основе одного поля, представляющего собой число в строковом формате
Поток Power Automate, запускаемый «при добавлении, изменении или удалении строки», не запускается
Не удалось проверить подпись карточки сообщения с действиями Power Automate
Как добавить действия по щелчку для перехода по списку ссылок внутри переменной? Power автоматизировать рабочий стол