如何使用groovy完全将json转换为键值对

时间:2015-03-16 08:38:29

标签: json parsing groovy multimap

我试图将json转换为map作为键值对我有一个方法JsonSlurper()给我键值对但我的查询是我有一个json如下。

{"Result":"null",
"gbet":{"Qpet":[
{"msg":"MSG","over":"N","repair":[{"notification":null,"sce":"1","repair1":"CA","repairDes":null,"ran":1},
{"rep":"dvr"}],
{"msgger":"MSGwe","overw":"Ner"}]
}

如何使用每个键值对在单个地图中获取所有内容 我这样做

 def slurper = new JsonSlurper().parseText(str)

    log.info("sulpher"+slurper)
    def keys=slurper.keySet();
    log.info('keys'+keys)

但它不适合我 我希望每个键和值对作为一个单独的字段。

2 个答案:

答案 0 :(得分:0)

根据您提供的JSON字符串;它只有两个父键,即Result和gbet。 gbet中有其他节点。您必须修复字符串或编写自己的方法来展平字符串。没有开箱即用的功能可以实现您的要求。

答案 1 :(得分:0)

您必须实施自己的展平方法。例如:

Map flattenMap(Map json) {
def result = [:]
json.each { k, v ->
    if (v instanceof Map) {
        result << flattenMap(v)
    } else if (v instanceof Collection && v.every {it instanceof Map}) {
        v.each { result << flattenMap(it) }
    } else {
        result[k] = v
    }
}
result
}

这个例子正在使用递归,所以如果嵌套得太深,它就会溢出。它不适用于您的样本,因为它不是有效的json。