繁体   English   中英

使用groovy脚本解析JSON(使用JsonSlurper)

[英]Parse JSON using groovy script (using JsonSlurper)

我只有两天大的习惯,我需要解析具有以下结构的json文件。 我的实际想法是我需要根据不同的顺序在不同的环境中运行一组作业,因此我想出了这种json格式作为groovy的输入文件

{
    "services": [{
        "UI-Service": [{
            "file-location": "/in/my/server/location",
            "script-names": "daily-batch,weekly-batch,bi-weekly-batch",
            "seq1": "daily-batch,weekly-batch",
            "seq2": "daily-batch,weekly-batch,bi-weekly-batch",
            "DEST-ENVT_seq1": ["DEV1", "DEV2", "QA1", "QA2"],
            "DEST-ENVT_seq2": ["DEV3", "DEV4", "QA3", "QA4"]
        }]
    }, {
        "Mobile-Service": [{
            "file-location": "/in/my/server/location",
            "script-names": "daily-batch,weekly-batch,bi-weekly-batch",
            "seq1": "daily-batch,weekly-batch",
            "seq2": "daily-batch,weekly-batch,bi-weekly-batch",
            "DEST-ENVT_seq1": ["DEV1", "DEV2", "QA1", "QA2"],
            "DEST-ENVT_seq2": ["DEV3", "DEV4", "QA3", "QA4"]
        }]
    }]
}

我尝试了以下脚本来解析json

        def jsonSlurper = new JsonSlurper()
        //def reader = new BufferedReader(new InputStreamReader(new FileInputStream("in/my/location/config.json"),"UTF-8"))
        //def data = jsonSlurper.parse(reader)
        File file = new File("in/my/location/config.json")
        def data = jsonSlurper.parse(file)

        try{
            Map jsonResult = (Map) data;
            Map compService = (Map) jsonResult.get("services");
            String name = (String) compService.get("UI-Service");
            assert name.equals("file-location");

        }catch (E){
            println Exception
        }

我需要先阅读所有服务(UI服务,移动服务等),然后阅读它们的元素和它们的值

或者,您可以执行以下操作:

new JsonSlurper().parseText(jsonTxt).services*.each { serviceName, elements ->
    println serviceName
    elements*.each { name, value ->
        println "    $name = $value"
    }
}

但这取决于您想要什么(您并没有在问题中真正解释)

从JsonParser对象读取的示例:

def data = jsonSlurper.parse(file)
data.services.each{ 
    def serviceName = it.keySet()
    println "**** key:${serviceName}  ******"
    it.each{ k, v ->
        println "element name: ${k}, element value: ${v}"
    }
}

其他选择:

println data.services[0].get("UI-Service")["file-location"]
println data.services[1].get("Mobile-Service").seq1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM