[英]Extracting specific data from JSON array in groovy
我正在尝试使用 groovy 从 JSON 数组中提取特定数据。 这是数组的一个示例:
{
"elements": [
{
"State": "AK",
"DayOfWeek": "Mon",
"StartTime": "0900",
"EndTime": "2200"
},
{
"State": "AK",
"DayOfWeek": "Tue",
"StartTime": "0900",
"EndTime": "2200"
},
{
"State": "AK",
"DayOfWeek": "Wed",
"StartTime": "0900",
"EndTime": "2200"
}]}
在这种情况下,我想在 DayOfWeek 是 Tue 时从 AK 中提取 StartTime。 到目前为止,我想出的唯一方法是使用 for 循环。 有没有更有效的方法来提取数据而无需迭代?
看看 JsonSlurper
像这样的东西:
def json = new JsonSurper().parseText(".....")
json.elements.each(element -> {
// logic to extract what you want
});
无论实现如何,最终都会涉及一些迭代。 不过,Groovy 可以帮助我们更有表现力地编写它。 这里的迭代是由find
完成的:
List elements = new groovy.json.JsonSlurper().parseText('''{
"elements": [
{
"State": "AK",
"DayOfWeek": "Mon",
"StartTime": "0900",
"EndTime": "2200"
},
{
"State": "AK",
"DayOfWeek": "Tue",
"StartTime": "0900",
"EndTime": "2200"
},
{
"State": "AK",
"DayOfWeek": "Wed",
"StartTime": "0900",
"EndTime": "2200"
}]}''')."elements"
return elements.find { it."State" == "AK" && it."DayOfWeek" == "Tue" }."StartTime"
由于您将其标记为“简化”,大概当您要求更高效的东西时,您真正的意思是您想要编写更少的代码,所以上面的适合。
如果查找性能是问题,因为您想要进行多次搜索,您可以使用 Map 来索引元素(一次),然后获取数据就变成了查找而不是搜索的问题:
Map elementsByStateAndDay = elements.groupBy { [it."State", it."DayOfWeek"] }
return elementsByStateAndDay.get(["AK", "Tue"]).head()."StartTime"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.