首页 > 解决方案 > 如何在 GitHub 操作中以 json 格式发送多行字符串?

问题描述

我正在处理 GitHub 操作,并且有一个案例需要将多行字符串作为 json 发送。我收到一些意外的令牌错误。

这是我的 test.md 和工作流程:

---------------------------
  **test**
  - update something
  - another (update)
  
  **test2**
  - Add `test` to param
  
steps:
    - uses: actions/checkout@v2
    - name: Get Log
      id: getLog
      run: |
        CHANGELOG="$(cat test.md)"
        CHANGELOG="$($CHANGELOG//'%'/'%25')"
        CHANGELOG="$($CHANGELOG//$'\n'/'%0A')" 
        CHANGELOG="$($CHANGELOG//$'\r'/'%0D')"
        echo "::set-output name=changeLog::$CHANGELOG"
    - name: Invoke CLI workflow with changelog
      uses: benc-uk/workflow-dispatch@v1
      with:
        workflow: Workflow publish
        token: ${{ secrets.TOKEN }}
        repo: repo/name
        inputs: '{ "changeLog": "${{steps.getLog.outputs.changeLog}}"}'

我收到意外的令牌错误。如何解决这个问题?

提前致谢

标签: stringgithub-actions

解决方案


您在提供的示例中似乎有 2 个问题。

  1. 您的字符串替换似乎无效。那应该是这样的。
run: |
  CHANGELOG=$(cat test.md)
  CHANGELOG="${CHANGELOG//'%'/'%25'}"
  CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
  CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
  echo "::set-output name=changeLog::$CHANGELOG"
  1. 您只是在json为对象创作无效。
inputs: '{ "changeLog": "${{steps.getLog.outputs.changeLog}}"}'

输出无效的json:

{ "changeLog": "---------------------------
  **test**
  - update something
  - another (update)
  
  **test2**
  - Add `test` to param"}

修复这个使用上下文函数toJSON()

inputs: '{ "changeLog": ${{ toJSON(steps.getLog.outputs.changeLog) }}}'

输出有效的json:

{ "changeLog": "---------------------------\n  **test**\n  - update something\n  - another (update)\n  \n  **test2**\n  - Add `test` to param"}

编辑

我发布了小型复合设置文本输出动作来处理多行字符串。

- uses: actions/checkout@v2
- name: test changelog
  uses: mkungla/actions-set-text-output@v1
  id: get-changekog
  with:
    text: $(cat tests/test-changelog.md)
- run: echo "${{ steps.get-changekog.outputs.value }}"

推荐阅读