试图在Groovy中从JSON数组中检索值
我有一个JSON对象,其中包含一个数组(它来自HTTP响应的主体),看起来类似于以下内容:试图在Groovy中从JSON数组中检索值,json,groovy,Json,Groovy,我有一个JSON对象,其中包含一个数组(它来自HTTP响应的主体),看起来类似于以下内容: {"people": [ { "name": "john", "city": "chicago", "age": "22" }, { "name": "gary", "city": "florida", "age": "35" }, { "name": "
{"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文档时获得信心。希望这有帮助。