Нужен ли цикл for, чтобы найти ключ / значение в json, используя Groovy JsonSlurper? - PullRequest
0 голосов
/ 11 мая 2018

python for loop:

actions = json_data['actions']
for a in actions:
    if 'causes' in a:
        for cause in a['causes']:
            if 'userId' in cause:
                self.user = cause['userId']

Как мне это сделать в groovy?

def jenkins_data = new JsonSlurper().parseText(obj)

Используя этот json, я не уверен, как выполнить детализацию, чтобы получить userId.Я предполагаю, что мне нужно использовать цикл for, чтобы проверить для каждого элемента в списке ключ «причина», а затем повторить для ключа «userId».

Вот пример полезной нагрузки, с которой я имею дело.

self.payload_a = {"number": 3585, "url": "https://test.m.test.com/job/gfdsgdsf/3585/",
                  "displayName": "master_3585", "timestamp": 1516992464686,
                  "actions": [{"something": "nothing"}, {"causes": [{"userId": "build"}]}]}

Используя пример полезной нагрузки, я могу повторить jenkins_data.actions.causes и посмотреть вывод, однако повторяющийся jenkins_data.actions.causes.userId равен нулю (даже если userId определенно находится в полезной нагрузке)

Когда я бегу

echo jenkins_data.actions.causes

Я получаю

[null, [[_TestIdCause, shortDescription:Started by user, B, userId:valueweneed, userName:test, B]], null, null, null, null, null, null, null, null, null, null, null, null, null, null]

1 Ответ

0 голосов
/ 11 мая 2018

Ответ - да.Вам нужно поместить цикл для обхода всех узлов в json.

Синтаксический анализ json является сложным.

Согласно Json: любой тип данных может быть возвращен из одного и того же узла, например ('userId') пока прохожу.как показано ниже

"userId" : "A"
...
"userId" : { ... }
...
"userId" : [ ... ]

Вы должны обрабатывать эти возвращаемые данные по своему желанию.Когда вы задаете вопрос для получения узла userId, просто используйте xpath, как показано ниже

def json = new JsonSlurper().parseText(jsontxt)

println json.actions.causes.userId

В вашем случае он возвращает список.так что просто flatten это.

println json.actions.causes.userId.flatten()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...