Попытка получить значение из массива JSON в Groovy - PullRequest
0 голосов
/ 28 марта 2020

У меня есть JSON объект с массивом (он из тела HTTP-ответа), который выглядит примерно так:

{"people": [
    {
        "name": "john",
        "city": "chicago",
        "age": "22"
    },
    {
        "name": "gary",
        "city": "florida",
        "age": "35"
    },
    {
        "name": "sal",
        "city": "vegas",
        "age": "18"
    }
]}

Я пытаюсь получить "город" или «возрастные» значения, ища «имя». например, когда "name" = "sal", я ожидаю, что "vegas" будет возвращен, если я спрашиваю "city" или "18, если я запросил" age ". Я пытаюсь сделать это в Groovy.

Даже не знаю, с чего начать с кода. Первый раз имеем дело с массивом JSON. Любая помощь очень ценится.

1 Ответ

1 голос
/ 28 марта 2020

Я бы порекомендовал начать с чтения С парсинга и создания страницы документации JSON. Вы узнаете о мощном классе groovy.json.JsonSlurper, который позволяет эффективно работать с JSON документами.

Когда вы создаете JSON представление объекта с помощью метода, подобного:

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

Вы можете получить доступ к JSON полям документа так же, как и к свойствам объекта. Например, json.people вернет вам список людей. Затем вы можете вызвать метод, подобный find(predicate), который возвращает первый результат, который соответствует данному предикату из списка. В этом случае вы можете вызвать что-то вроде:

def person = json.people.find { it.name == "sal" }

it - это переменная, которая сохраняет ссылку на объект в процессе итерации. Это означает, что find просматривает список и ищет первый объект, который соответствует it.name == "sal".

Когда вы найдете человека, связанного с именем, вы можете извлечь поля city и age таким же образом, как вы бы открывали поля объекта, например,

println person.age // prints 18
println person.city // prints vegas

Здесь полный пример:

import groovy.json.JsonSlurper

def rawJson = '''{"people": [
    {
        "name": "john",
        "city": "chicago",
        "age": "22"
    },
    {
        "name": "gary",
        "city": "florida",
        "age": "35"
    },
    {
        "name": "sal",
        "city": "vegas",
        "age": "18"
    }
]}'''

def json = new JsonSlurper().parseText(rawJson) // creates JSON object

def person = json.people.find { it.name == "sal" } // finds the first person with name "sal"

assert person.city == "vegas" // calling person.city returns a city name

assert person.age == "18" // calling person.age returns age of a person

Чтобы узнать больше об обработке JSON документов с помощью Groovy, попробуйте прочитать страницу документации, которую я прикрепил выше. Это поможет вам понять более сложные варианты использования и поможет вам обрести уверенность в работе с синтаксическим анализом JSON документов с использованием Groovy. Надеюсь, это поможет.

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