所以我一直坚持这个问题相当长一段时间了。Groovy访问和循环虽然嵌套Json
我正在处理一些以JSON形式提供的数据,并使用groovy通过WSLITE进行检索。 到目前为止,处理json结构和查找数据是没有问题的,因为WSLITE 提供的web服务响应被重新调用为JsonSlurper的一个实例。 我现在遇到了一些情况,json响应的结构会根据我查询的结果而变化。
结构是这样的:
{
"result":[
...
"someId": [...]
"somethingElse": [...]
...
"variants":{
"0123":{
"description": "somethingsomething",
...,
...,
"subVariant":{
"1234001":{
name: "somename",
...
}
}
},
"4567":{
"description": "somethingsomething",
...,
...,
"subVariant":{
"4567001":{
name: "somename"
...
...
}
}
}
}
]
}
正如你所看到的,变体节点是一个对象保持保持更加嵌套对象另一个嵌套对象。 这里的问题是变体节点有时拥有多个对象,但总是至少有一个。相同vor subVariant节点。 此外,我现在不提前(数字)节点的名称。因此我不得不建立一条路径。
由于JSON地图,列表和数组在常规处理,我想我能做到这一点:
def js = JsonSlurper().parseText(jsonReponse)
println js.result.variants[0].subVariant[0].name //js.result.variants.getClass() prints class java.util.ArrayList
但返回null
而静态地访问数据是这样的:
println "js.result.variants."0123".subVariant."1234001".name
works just fine.
只是pinting变种这样
println js.result.variants
也正常工作。它会打印整个变体树的第一个(也是唯一的)内容。
我的问题是:为什么?
这似乎是我不能通过索引解决nexted对象......我是对吗?我还会怎么做呢?
在此先感谢。
的东西是“js.result.variants.getClass ()'显示它确实是一个java.util.ArrayList –
你可以把你准确的json吗?因为这看起来不是那样,因为你甚至有一些json错误(例如subvariant中的名字不在引号中) – OsaSoft