我想将所有JSON键值转换为Map。我需要将键作为gpath结果并将值作为对象键值。
输入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()对象类,但找不到将所有键映射到gpath的解决方案。
任何帮助将不胜感激!
答案 0 :(得分:1)
有点奇怪的请求...想不起来为什么要这么做...但是无论如何,您都需要编写一些逻辑来遍历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].firstName