Groovy: Как проанализировать значение ключа json конкретный c в список / массив - PullRequest
0 голосов
/ 21 января 2020

Я новичок в groovy и пытаюсь 1) из вывода prettyPrint (в Json ()), я пытаюсь получить список значений из указанного ключа c внутри массива json используя groovy. Используя приведенный ниже JSON вывод из примера prettyPrint ниже, я пытаюсь создать список, который состоит только из значений ключа имени.

Мой код:

def string1 = jiraGetIssueTransitions(idOrKey: jira_id)
echo prettyPrint(toJson(string1.data))

def pretty =  prettyPrint(toJson(string1.data))
def valid_strings = readJSON text: "${pretty}"
echo "valid_strings.name : ${valid_strings.name}"

Выход prettyPrint(toJson(string1.data)) ниже JSON:

 {
     "expand": "places",
     "places": [
      {
        "id": 1,
        "name": "Bulbasaur",
        "type": {
            "grass",
            "poison"
        }
    },
    {
        "id": 2,
        "name": "Ivysaur",
        "type": {
            "grass",
            "poison"
        }
     } 
    }

Ожидаемый результат

valid_strings.name : ["Bulbasaur", "Ivysaur"]

токовый выход

valid_strings.name : null

1 Ответ

0 голосов
/ 21 января 2020

Недопустимое печатное содержимое JSON недопустимо.

Если JSON допустимо, то к именам можно обращаться следующим образом:

import groovy.json.JsonSlurper

def text = """
{
    "expand": "places",
    "places": [{
            "id": 1,
            "name": "Bulbasaur",
            "type": [
                "grass",
                "poison"
            ]
        },
        {
            "id": 2,
            "name": "Ivysaur",
            "type": [
                "grass",
                "poison"
            ]
        }
    ]
}
"""

def json = new JsonSlurper().parseText(text)
println(json.places*.name)

В основном используйте Распылите атрибут поиска (например, *.name) на соответствующий объект (например, json.places).

...