【看一遍就会】使用Groovy遍历解析多层嵌套json

使用Groovy遍历解析嵌套json

  • Groovy使用JsonSlurper解析json时,不用区分是{}对象型,还是[]数组型,或者是两者混合,直接解析就可以获取到json相关的key或value。
  • 遍历嵌套json方法:
    //如果不知道json的key,value名称,可以使用.each结合groovy闭包进行遍历。
遍历多层嵌套json 例子一:
import groovy.json.JsonSlurper

def json = '''{
    "upperlevel1": {
      "lowerlevel1": "ABC",
      "lowerlevel2": "DEF"
    },
    "upperlevel2": {
      "lowerlevel1": "HIJ",
      "lowerlevel2": "KLM"
    },
    "dddd":{
        "hello": "world"
    }
}'''

//解析demo1:
def slurped = new JsonSlurper().parseText(json)

slurped.each{ key, value ->  //遍历json第一层
    println "${key}"
    //println "${value}"
   value.each {k, v ->       //遍历json第二次
       println "${k}"
       //println "${value}"
   }
}
//*注意:在进行json第二层遍历的时候,必须要用第一层的 value 去进行第二层的key value遍历。依此类推。


//解析demo2:
def slurped = new JsonSlurper().parseText(json)

slurped.each{ key, value -> //遍历第一层的key:value
//    println "${key}"     //输出第一层的key值
//    println "${value}"   //输出第一层的value值
    value.each {k, v ->    //遍历第二层的k:v
//        println "${k}"   //输出第二层的k值

//        if(k.contains('it'))  //如果第二层的 k值 包含某个字符,则输出
//        {
//            println "${v}"  //输出这个字符串自己的 v 值
//            println "${k}"  //输出这个字符串自己的 v 值
//        }

        if(v.contains('related to'))  //如果第二层的 v值 包含某个字符,则输出
        {
//            println "${v}" //如果第二层的 v 包含某个字符,则输出 v 自己的名字。
          println "${value}" //如果第二层的 v 包含某个字符,则输出第二层 v为‘related to’的同级的所有k:v值。
        }
    }
}
遍历多层嵌套json 例子二:
def jsonText = """
{
    "Application1": {
    "environments": {
        "it": [
                "server1"
        ],
        "ft": [
                "server2"
        ],
        "stg": [
                "server3"
        ],
        "prd": [
                "server4"
        ],
        "relationship": [ 
                "related to"
        ]
    },
    "war-path" : "/opt/tomcat/",
    "war-name" : "Application1"
},
    "Application2": {
    "environments": {
        "it": [
                "serverA"
        ],
        "ft": [
                "serverB"
        ],
        "stg": [
                "serverC"
        ],
        "prd": [
                "serverD"
        ],
        "relationship": [ 
                "related to"
        ]
    },
    "war-path" : "/var/lib",
    "war-name" : "Application2"
}
}
"""

//解析demo:
import groovy.json.JsonSlurper

def jsonSlurper = new JsonSlurper()
def jsonMap = jsonSlurper.parseText(jsonText)

//如果不知道条目名称,则可以使用.each进行遍历
jsonMap.each { key, value ->             //遍历第一层的key:value
    value.environments.each { k, v ->    //可以指定value(该value下仍有好几层的话)的某一个字段去遍历第二层的k:v

//        if(k.contains('it')) //如果第二层的 k值 包含某个字符,则输出这个字符自己的k值
//        {
//            println "${k}"
//        }
        if(v.contains('related to'))
        {
//            println "${k}"  //如果第二层的 v值 包含某个字符,则输出这个字符的k值
            println "${value}"  //如果第二层的 v 包含某个字符,则输出第二层 v为‘related to’的同级的所有k:v。
        }

    }
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值