【问题标题】:Map with json to a List with specific key使用 json 映射到具有特定键的列表
【发布时间】:2018-11-15 08:24:58
【问题描述】:

我已经设法得到一个 json 列表并从 json 中取出一个密钥。

我正在研究如何将每个版本值放入列表中。我如何通过地图做到这一点?

Map convertedJSONMap = new JsonSlurperClassic().parseText(data)

//If you have the nodes then fetch the first one only
if(convertedJSONMap."items"){
    println "Version : " + convertedJSONMap."items"[0]."version"
}   

所以我需要的是某种 foreach 循环,它会抛出 Map 并获取项目。每个版本并将其放入列表中。如何?

【问题讨论】:

    标签: groovy


    【解决方案1】:

    Groovy 有Collection.collect(closure),可用于将一种类型的值列表转换为新值列表。考虑以下示例:

    import groovy.json.JsonSlurper
    
    def json = '''{
        "items": [
            {"id": "ID-001", "version": "1.23", "name": "Something"},
            {"id": "ID-002", "version": "1.14.0", "name": "Foo Bar"},
            {"id": "ID-003", "version": "2.11", "name": "Something else"},
            {"id": "ID-004", "version": "8.0", "name": "ABC"},
            {"id": "ID-005", "version": "2.32", "name": "Empty"},
            {"id": "ID-006", "version": "4.11.2.3", "name": "Null"}
        ]
    }'''
    
    def convertedJSONMap = new JsonSlurper().parseText(json)
    
    def list = convertedJSONMap.items.collect { it.version }
    
    println list.inspect()
    

    输出:

    ['1.23', '1.14.0', '2.11', '8.0', '2.32', '4.11.2.3']
    

    Groovy 还提供了spread operator *.,它可以将这个示例简化为:

    import groovy.json.JsonSlurper
    
    def json = '''{
        "items": [
            {"id": "ID-001", "version": "1.23", "name": "Something"},
            {"id": "ID-002", "version": "1.14.0", "name": "Foo Bar"},
            {"id": "ID-003", "version": "2.11", "name": "Something else"},
            {"id": "ID-004", "version": "8.0", "name": "ABC"},
            {"id": "ID-005", "version": "2.32", "name": "Empty"},
            {"id": "ID-006", "version": "4.11.2.3", "name": "Null"}
        ]
    }'''
    
    def convertedJSONMap = new JsonSlurper().parseText(json)
    
    def list = convertedJSONMap.items*.version
    
    println list.inspect()
    

    甚至这个(你可以用.version替换*.version):

    import groovy.json.JsonSlurper
    
    def json = '''{
        "items": [
            {"id": "ID-001", "version": "1.23", "name": "Something"},
            {"id": "ID-002", "version": "1.14.0", "name": "Foo Bar"},
            {"id": "ID-003", "version": "2.11", "name": "Something else"},
            {"id": "ID-004", "version": "8.0", "name": "ABC"},
            {"id": "ID-005", "version": "2.32", "name": "Empty"},
            {"id": "ID-006", "version": "4.11.2.3", "name": "Null"}
        ]
    }'''
    
    def convertedJSONMap = new JsonSlurper().parseText(json)
    
    def list = convertedJSONMap.items.version
    
    println list.inspect()
    

    所有示例都产生相同的输出。

    【讨论】:

    • 绝对完美的答案。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2011-05-25
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    相关资源
    最近更新 更多