【问题标题】:jenkins-pipeline readJSON - how to read key elements as a listjenkins-pipeline readJSON - 如何将关键元素作为列表读取
【发布时间】:2019-10-16 12:01:19
【问题描述】:

我无法使用 readJSON 从 JSON 读取所有“type-X.X”键

oldJson 字符串:

{
"branch":{
    "type-0.2":{"version":"0.2","rc":"1","rel":"1","extras":"1"}}
    "type-0.3":{"version":"0.3","rc":"1","rel":"1","extras":"1"}}
}

我尝试像示例一样访问它 https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readjson-read-json-from-files-in-the-workspace

def branchList = new JsonSlurper().parseText(oldJson['branch'])
echo (branchList.keySet().toString())

但它失败了:

hudson.remoting.ProxyException: groovy.lang.MissingMethodException: 否 方法签名:groovy.json.JsonSlurper.parseText() 适用 对于参数类型:(net.sf.json.JSONObject) 值:

我想要一个列表 ["type-0.2", "type-0.3"]

【问题讨论】:

    标签: jenkins groovy jenkins-pipeline jenkins-plugins jenkins-groovy


    【解决方案1】:

    您提供的 JSON 字符串无效。在第一个子元素之后有一个额外的} 和一个缺失的,。它必须是:

    {
    "branch":{
        "type-0.2":{"version":"0.2","rc":"1","rel":"1","extras":"1"},
        "type-0.3":{"version":"0.3","rc":"1","rel":"1","extras":"1"}
        }
    }
    

    现在,您可以使用管道中的 readJSON 步骤解析此内容,以获取密钥列表。

    stage('Read-JSON') {
        steps {
            script {
                def oldJson = '''{
                "branch":{
                    "type-0.2":{"version":"0.2","rc":"1","rel":"1","extras":"1"},
                    "type-0.3":{"version":"0.3","rc":"1","rel":"1","extras":"1"}
                    }
                }'''
                def props = readJSON text: oldJson
                def keyList = props['branch'].keySet()
                echo "${keyList}"
                // println(props['branch'].keySet())
    
            }
        }
    }
    

    输出:

    [Pipeline] stage
    [Pipeline] { (Read-JSON)
    [Pipeline] script
    [Pipeline] {
    [Pipeline] readJSON
    [Pipeline] echo
    [type-0.2, type-0.3]
    [Pipeline] }
    [Pipeline] // script
    [Pipeline] }
    [Pipeline] // stage
    

    【讨论】:

    • println(props['branch'].keySet()) 工作正常,但由于某种原因我不能用echo 打印它它适用于println...
    • 与 Groovy println 相反,echo 不会计算其中的表达式。要回显列表,您需要先将其存储在变量def keyList = props['branch'].keySet() 中,然后在其上调用 echo 作为 GString 进行插值 echo "${keyList}"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多