Github Action中使用环境变量生成JSON Payload遇问题求助
问题解决方法
问题根源
你遇到的核心问题是:单引号包裹的字符串中,GitHub Actions不会解析${{ ... }}表达式,同时手动转义JSON的写法会干扰变量替换逻辑,导致变量原封不动传入API。
解决方案
方案1:使用toJSON函数自动生成JSON(推荐)
GitHub Actions内置的toJSON函数可以自动处理JSON格式、转义字符,同时正确解析环境变量,是扩展复杂JSON结构最省心的方式:
env: API: ..... BRANCH_NAME: ${GITHUB_REF##*/} - name: call api uses: privateaction with: API: ${{ env.AWS_LAMBDA_NAME }} Payload: ${{ toJSON({ Name: env.BRANCH_NAME }) }}
后续扩展复杂结构时,直接在对象中添加键值对即可,比如:
Payload: ${{ toJSON({ Name: env.BRANCH_NAME, Version: env.BUILD_VERSION, Tags: ['staging', 'test'] }) }}
方案2:改用双引号包裹字符串并正确转义
如果必须手动编写JSON字符串,需要用双引号包裹整个Payload,同时内部的双引号用反斜杠转义,这样GitHub Actions会解析其中的${{ ... }}表达式:
env: API: ..... BRANCH_NAME: ${GITHUB_REF##*/} - name: call api uses: privateaction with: API: ${{ env.AWS_LAMBDA_NAME }} Payload: "{\"Name\": \"${{ env.BRANCH_NAME }}\"}"
方案3:提前在环境变量中构建完整Payload
可以先在env中完成变量替换和JSON构建,再直接引用该环境变量:
env: API: ..... BRANCH_NAME: ${GITHUB_REF##*/} PAYLOAD_JSON: '{"Name": "${{ env.BRANCH_NAME }}"}' - name: call api uses: privateaction with: API: ${{ env.AWS_LAMBDA_NAME }} Payload: ${{ env.PAYLOAD_JSON }}
内容的提问来源于stack exchange,提问作者Kiksen
相关产品推荐
相关产品推荐

