[英]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.