【问题标题】:Accessing and looping though nested Json in Groovy在 Groovy 中访问和循环访问嵌套的 Json
【发布时间】: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


    【解决方案1】:

    您无法使用[0] 访问它的原因仅仅是因为"variants": { ... 不是一个数组,看起来像这样:"variants" :[ ...

    所以你的variants 是一个具有可变数量属性的对象,它基本上是一个命名映射。 但是,如果您不知道条目名称,您可以使用 .each 遍历这些条目,因此您可以执行类似 js.result.variants.each{key, val -> println val.description} 的操作

    子变体也有类似的东西

    【讨论】:

    • The thing is 'js.result.variants.getClass()' 表明它确实是一个 java.util.ArrayList
    • 你能把你得到的确切的 json 放出来吗?因为这似乎不是那样,因为你甚至在那里有一些 json 错误(例如,子变量中的名称不在引号中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    相关资源
    最近更新 更多