1.我有一个包含多个地图的列表,如下图所示。 每个地图都包含许多我想要获得“名称”值的键
{
"question":{
"com.forms.tree":{
"requiredByDefault":true,
"questionDetails":{
"com.forms.Details":{
"preferredFormComponent":"TEXT"
}
},
"locale":{
"language":"en"
},
"formField":{
"name":"CUSTOM_347",
"tag":"input",
"url":"Demo"
}
}
},
"Field":"true"
},{
"question":{
"com.forms.tree":{
"questionDetails":{
"com.forms.Details":{
"preferredFormComponent":"TEXT"
}
},
"locale":{
"language":"en"
},
"formField":{
"name":"CUSTOM_348",
"url":"Demo"
}
}
},
"Field":"true"}
我希望获得“name”的值,该值位于每个Map中但不想像question?."com.forms.tree"?.formField?.name
那样迭代。
Is there any other approach in groovy?
答案 0 :(得分:1)
所以给了json:
dt[,DataField,by=FilterField]'
我们可以用以下方法解析它:
def jsonTxt = '''{
"question":{
"com.forms.tree":{
"requiredByDefault":true,
"questionDetails":{
"com.forms.Details":{
"preferredFormComponent":"TEXT"
}
},
"locale":{
"name": "test",
"language":"en"
},
"formField":{
"name":"CUSTOM_347",
"tag":"input",
"url":"Demo"
}
}
},
"Field":"true"
}'''
你想在那个对象中找到import groovy.json.*
def json = new JsonSlurper().parseText(jsonTxt)
条目,所以让我们编写一个递归查找器,它将遍历地图的地图,寻找带有给定键的第一个条目:
"formField"
然后你可以检查它是否有效:
static findFirstByKey(Map map, key) {
map.get(key) ?: map.findResult { k, v -> if(v in Map) findFirstByKey(v, key) }
}