试图在Groovy中从JSON数组中检索值

试图在Groovy中从JSON数组中检索值,json,groovy,Json,Groovy,我有一个JSON对象,其中包含一个数组(它来自HTTP响应的主体),看起来类似于以下内容: {"people": [ { "name": "john", "city": "chicago", "age": "22" }, { "name": "gary", "city": "florida", "age": "35" }, { "name": "

我有一个JSON对象,其中包含一个数组(它来自HTTP响应的主体),看起来类似于以下内容:

{"people": [
    {
        "name": "john",
        "city": "chicago",
        "age": "22"
    },
    {
        "name": "gary",
        "city": "florida",
        "age": "35"
    },
    {
        "name": "sal",
        "city": "vegas",
        "age": "18"
    }
]}
我试图通过查找“name”来检索“city”或“age”值。例如,当“name”=“sal”时,如果我请求的是“city”或“18”,我希望返回“vegas”,如果我请求的是“age”,我会尝试在Groovy中这样做


甚至不知道从哪里开始编写代码。第一次处理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”
匹配的第一个对象

当您找到与姓名关联的人时,您可以使用访问对象字段的相同方式提取
城市
年龄
字段,例如

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

了解更多关于用Groovy处理JSON文档,考虑阅读上面所附的文档页。它将帮助您理解更复杂的用例,这将有助于您在使用Groovy解析JSON文档时获得信心。希望这有帮助。