我希望将所有的JSON键值转换为Map。其中我需要key作为gpath结果,value作为对象键值。
输入Json
{
"employees": {
"employee": [{
"id": "1",
"firstName": "Tom",
"lastName": "Cruise",
"photo": "https://pbs.twimg.com/profile_images/735509975649378305/B81JwLT7.jpg"
},
{
"id": "2",
"firstName": "Maria",
"lastName": "Sharapova",
"photo": "https://pbs.twimg.com/profile_images/3424509849/bfa1b9121afc39d1dcdb53cfc423bf12.jpeg"
},
{
"id": "3",
"firstName": "James",
"lastName": "Bond",
"photo": "https://pbs.twimg.com/profile_images/664886718559076352/M00cOLrh.jpg"
}
]
}
}我所期望的输出,
[employees.employee[0].id:"1",
employees.employee[0].firstName:"tom",
....]我已经尝试过Groovy ()对象类,但我无法找到将所有键映射到jsonSurper中的解决方案。
任何帮助都将不胜感激!
发布于 2018-09-09 02:48:21
这是个奇怪的请求。我想不出你为什么要这么做...但不管怎样,您需要编写一些逻辑来递归通过JsonSlurper生成的映射,并折叠密钥……
假设上面的json在一个字符串变量json中
def map = new JsonSlurper().parseText(json)
def collapseKey(String prefix, Map result, value) {
if (value instanceof Map) {
value.each { k, v ->
collapseKey("${prefix ? "${prefix}." : ''}$k", result, v)
}
} else if (value instanceof List) {
value.eachWithIndex{ e, idx ->
collapseKey("${prefix}[$idx]", result, e)
}
} else {
result."$prefix" = value
}
result
}
def result = collapseKey("", [:], map)您可以(当然)将其解析为映射并执行以下操作:
map.employees.employee[0].firstNamehttps://stackoverflow.com/questions/52238089
复制相似问题