You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Pipeline中readJSON读取布尔值false显示为null的解决咨询

Jenkins Pipeline无法正确读取JSON中的布尔值false问题解决

问题场景

现有JSON文件myfile.json内容如下:

{
    "vm": {
        "MyVal1": false,
        "MyVal2": true,
        "MyVal3": "some string"
    }
}

对应的Jenkins Pipeline脚本执行后,MyVal2的布尔值true能正常获取,但MyVal1的false始终显示为null。原因是原脚本的if判断逻辑存在问题:Groovy中布尔值false会被直接视为假,导致props['vm'].get("MyVal1")为false时,无法进入赋值分支。

原Pipeline关键判断代码:

if (props['vm'].get("MyVal1") && (props['vm'].get("MyVal1") == true || props['vm'].get("MyVal1") == false)) {
    env.MYVAL1 = props['vm'].get("MyVal1")
}

解决方案

修改判断逻辑,先检查键是否存在,再验证值的类型为布尔值,而非直接用值作为判断条件。这样无论布尔值是true还是false,都会进入赋值分支。

修改后的完整Pipeline脚本:

pipeline {
    agent any
    options {
        ansiColor('xterm')
    }
    stages {
        stage('Parse VM details') {
            steps {
                echo "Read VM JSON file"
                script {
                    def props = readJSON file: 'myfile.json'
                    // 修改MyVal1的判断逻辑:先检查键存在,再判断类型为Boolean
                    if (props['vm'].containsKey("MyVal1") && props['vm'].MyVal1 instanceof Boolean) {
                        env.MYVAL1 = props['vm'].MyVal1
                    }
                    // 同步修改MyVal2的判断逻辑保持一致性
                    if (props['vm'].containsKey("MyVal2") && props['vm'].MyVal2 instanceof Boolean) {
                        env.MYVAL2 = props['vm'].MyVal2
                    }
                    if (props['vm'].get("MyVal3")) {
                        env.MYVAL3 = props['vm'].get("MyVal3")
                    } else {
                        env.VM_ERRORMSG = "MyVal3 is not defined or empty"
                    }
                    echo "MyVal1 will be: ${env.MYVAL1}"
                    echo "MyVal2 will be: ${env.MYVAL2}"
                    echo "MyVal3 will be: ${env.MYVAL3}"
                    if (env.VM_ERRORMSG) {
                        echo "${env.VM_ERRORMSG}"
                    }
                }
            }
        }
    }
}

关键改动说明

  • 使用containsKey("MyVal1")确认JSON中存在该键,避免键不存在时的空指针问题
  • 通过instanceof Boolean验证值的类型,确保只有布尔值会被赋值,同时兼容true和false两种情况
  • 可以直接用props['vm'].MyVal1替代get方法,Groovy支持这种更简洁的属性访问方式

内容的提问来源于stack exchange,提问作者Darwick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:27:13