所以我已经被这个问题困扰了很长一段时间了。
我正在处理一些以 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"
...
...
}
}
}
}
]
}
如您所见,variants 节点是一个对象,其中包含另一个嵌套对象,该对象包含更多嵌套对象。这里的问题是变体节点有时拥有多个 OBJECT 但总是至少有一个。与 subVariant 节点相同。此外,我现在没有提前指定(数字)节点的名称。因此我必须动态地构建路径。
由于 Json 在 groovy 中被处理为地图、列表和数组,我认为我能够做到这一点:
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.
只是像这样钉住变体
println js.result.variants
也可以正常工作。它打印整个变体树的第一个(也是唯一一个)内容。
我的问题是:为什么会这样?
似乎我无法通过索引来处理下一个对象......我是对的吗?我该怎么办?
提前致谢。