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

GitHub Workflow中toJson与fromJson使用报错问题咨询

GitHub Workflow跨作业传递矩阵参数报错问题解析

问题场景

在GitHub Workflow中尝试通过matrix作业输出JSON格式的PHP版本列表,再在build作业中用fromJson读取该输出作为矩阵参数时触发报错,相关代码如下:

on:
    push:

jobs:
    matrix:
        runs-on: ubuntu-latest
        name: Setup
        outputs:
            php-versions: ${{ toJson('["7.4.10", "5.6.13", "7.4.33", "8.1"]') }}

    build:
        runs-on: ubuntu-latest
        needs: matrix
        strategy:
            fail-fast: false
            matrix:
                version: ${{ fromJson(needs.matrix.outputs.php-versions) }}

报错信息:

Error when evaluating 'strategy' for job 'build'. .github/workflows/test.yaml (Line: 17, Col: 26): Unexpected value '["7.4.10", "5.6.13", "7.4.33", "8.1"]'

根据GitHub官方文档:

toJSON: returns a pretty-print JSON representation of value
fromJson: Returns a JSON object or JSON data type for value

错误原因

核心问题在于**toJson的参数使用错误**:

  • 传入toJson的是一个已转义的JSON字符串字面量('["7.4.10", "5.6.13", "7.4.33", "8.1"]'),而非原生的数组类型。
  • toJson会将这个字符串再次编码为JSON格式,导致最终输出的php-versions是一个双重编码的JSON字符串(即输出内容为"[\"7.4.10\",\"5.6.13\",\"7.4.33\",\"8.1\"]")。
  • 当build作业用fromJson解析该输出时,得到的结果仍然是一个字符串(["7.4.10", "5.6.13", "7.4.33", "8.1"]),而非GitHub Workflow矩阵所需的数组类型,因此触发“Unexpected value”报错。

修正方案

直接将原生数组传入toJson,而非字符串字面量:

on:
    push:

jobs:
    matrix:
        runs-on: ubuntu-latest
        name: Setup
        outputs:
            php-versions: ${{ toJson(['7.4.10', '5.6.13', '7.4.33', '8.1']) }}

    build:
        runs-on: ubuntu-latest
        needs: matrix
        strategy:
            fail-fast: false
            matrix:
                version: ${{ fromJson(needs.matrix.outputs.php-versions) }}

此时toJson会将原生数组编码为正确的JSON数组字符串,fromJson解析后得到的是数组类型,符合matrix参数的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:07:27