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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:42:03