【发布时间】:2016-08-15 10:18:11
【问题描述】:
所以我已经被这个问题困扰了很长一段时间了。
我正在处理一些以 JSON 形式提供并通过 WSLITE 使用 groovy 检索的数据。 到目前为止,处理 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
也可以正常工作。它打印整个变体树的第一个(也是唯一一个)内容。
我的问题是:为什么会这样?
似乎我无法通过索引来处理下一个对象...对吗?我该怎么办?
提前致谢。
【问题讨论】:
标签: json groovy jsonobject jsonslurper