GitHub Actions工作流中如何判断JSON对象是否为空
问题原因
GitHub Actions 的 if 条件使用自研的表达式语法,仅支持基础类型(字符串、数字、布尔值)的运算和比较,不支持直接声明空对象{},也不允许调用Object、JSON等 JavaScript 全局类,因此你之前的写法都会触发语法报错。
可行解决方案
方案1:将判断逻辑移到 github-script 内部(推荐)
actions/github-script 运行在完整的 Node.js 环境中,支持所有标准 JavaScript 语法,直接把空对象判断逻辑写在 script 块内即可:
- name: Fail if security tests found any issues uses: actions/github-script@v3 with: script: | // 请根据你的实际输出字段调整取值路径 // 如果输出的是字符串化的JSON,需要额外调用JSON.parse转换 const testResults = ${{ steps.securityTestsResults.outputs.result }} if (Object.keys(testResults).length > 0) { core.setFailed('security tests failed: non-empty results') }
方案2:提前导出空对象判断结果
如果你需要在 if 条件中直接使用判断结果,可以在产出测试结果的步骤,提前把是否为空的判断结果导出为布尔类型的步骤输出:
- name: Run security tests id: securityTestsResults run: | # 以下为示例逻辑,请适配你自己的测试结果产出流程 TEST_RESULT=$(cat your_test_result.json) if [ "$TEST_RESULT" = "{}" ]; then echo "is_empty=true" >> $GITHUB_OUTPUT else echo "is_empty=false" >> $GITHUB_OUTPUT fi # 后续步骤就可以直接用基础类型的输出做判断 - name: Fail if security tests found any issues if: ${{ steps.securityTestsResults.outputs.is_empty == 'false' }} uses: actions/github-script@v3 with: script: core.setFailed('security tests failed: non-empty results')
注意事项
所有涉及复杂对象、函数调用的逻辑,都不要直接写在 GitHub Actions 的 if 表达式中,要么下沉到对应执行脚本内处理,要么提前转换为字符串、布尔等基础类型的输出后再做比较。
内容的提问来源于stack exchange,提问作者wristbands
相关产品推荐
相关产品推荐

