代码之家  ›  专栏  ›  技术社区  ›  Mikael

使用json映射到具有特定键的列表

  •  1
  • Mikael  · 技术社区  · 7 年前

    我已经成功地获得了一个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循环,它将抛出地图并只获取项目。并将其放入列表中。怎样

    1 回复  |  直到 7 年前
        1
  •  1
  •   Szymon Stepniak    7 年前

    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()
    

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