Как правильно разобрать JSON в Groovy - PullRequest
0 голосов
/ 10 мая 2018

Я не уверен, как правильно проанализировать вложенный JSON с помощью Groovy.Я включил работающий скрипт на Python, чтобы вы могли точно видеть, что я пытаюсь сделать в Groovy.

JSON Мне нужно проанализировать:

json_payload = {"number": 3585, "url": "https://jenkins.test.com/job/test/3585/",
                  "displayName": "test_3585", "timestamp": 1516992464686,
                  "actions": [{"causes": [{"userId": "test"}]}]}

Что я хочу сделать (Python):

class JenkinsParser:
    def __init__(self, json_data):

        self.display_name = json_data['displayName']
        self.url = json_data['url']
        self.start_time = json_data['timestamp']
        self.exec_url = json_data['url']
        self.exec_number = json_data['number']
        self.user = None
        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']

        url_split = self.execution_url.split("/job/")
        self.jenkins_url = url_split[0]
        self.job_name = url_split[-1].split("/")[0]

Примечание: Groovy не обязательно должен быть классом и не должен использовать JSonSlurper

Если я использую JsonSlurper

def slurper = new groovy.json.JsonSlurper()
def result = slurper.parseText(json_payload)

Могу ли я получить доступ ко всем нужным мне значениям?

result.displayName
result.url
result.timestamp
result.url
result.number
result.actions.causes.userId

Я не уверен, как получить userId ..

1 Ответ

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

Да, вы можете получить доступ к значениям, как вы описали.

Вы можете получить доступ к идентификатору пользователя, например result​.actions.first().causes.first().userId​, если вы уверены, что ваши данные структурированы именно так.Если вы можете иметь или не иметь действия, или можете иметь или не иметь причины, вы можете сделать что-то вроде result​.actions?.first()?.causes?.first()?.userId​, чтобы сделать ваш доступ нулевым, или вы можете использовать оператор распространения (*.) для доступа к userId, если там естьможет быть несколькими действиями или причинами.

Согласно вашему комментарию о чем-то, возвращающем null, это работает как ожидалось:

def json_payload = """{"number": 3585, "url": "https://jenkins.test.com/job/test/3585/", "displayName": "test_3585", "timestamp": 1516992464686, "actions": [{"causes": [{"userId": "test"}]}]}"""
def slurper = new groovy.json.JsonSlurper()
def result = slurper.parseText(json_payload)
return result​.actions?.first()?.causes?.first()?.userId​

и возвращает «тест».Если вы не видите похожих результатов, у вас может быть синтаксическая ошибка или другой ключ в ваших фактических данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...