输入 JSON文件:
{
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{
"value": "New",
"onclick": ["CreateNewDoc()","hai"],
"newnode":"added"
}
]
}
}
}
常规代码:
def newjson = new JsonSlurper().parse(new File ('/tmp/test.json'))
def value=newjson.menu.popup.menuitem.value
def oneclick=newjson.menu.popup.menuitem.onclick
println value
println value.class
println oneclick
println oneclick.class
输出:
[New]
class java.util.ArrayList
[[CreateNewDoc(), hai]]
class java.util.ArrayList
这里,
携带String和List的json节点返回与上面groovy代码相同的类名。
我如何区分节点
value
和oneclick
。从逻辑上讲,我希望value
应该是String 的实例
。但两者都以ArrayList
形式返回。如何使用groovy获取json中节点的确切类型。
更新 1:
我不太清楚,可以像下面那样做。我期望得到这样的结果,
New
class java.util.String
[CreateNewDoc(), hai]
class java.util.ArrayList
最佳答案
给你:
- 在下面的脚本中使用闭包来显示每个值及其类型的详细信息
- 另一个闭包用于显示
menuitem
列表中的每个 map 。
def printDetails = { key, value -> println "Key - $key, its value is \"${value}\" and is of typpe ${value.class}" }
def showMap = { map -> map.collect { k, v -> printDetails (k,v) } }
def json = new groovy.json.JsonSlurper().parse(new File('/tmp/test.json'))
def mItem = json.menu.popup.menuitem
if (mItem instanceof List) {
mItem.collect { showMap it }
}
println 'done'
您可以快速在线尝试相同的 demo
关于json - 如何使用 groovy 获取确切的 json 节点实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321669/