
GitHub ActionsでRepository内のJson fileをパースする
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部 IoT事業部の若槻です。
以前のエントリで次のようなことを試しました。
しかしその後、このRepository内に作成したJson fileをGitHub Actionsでパースして使用する処理が必要となったため、方法を確認してみました。
確認してみた
パース対象として、Repository(PushしたBranch)上に次のJson fileを作成しておきます。
{
  "title": "データ取得APIを実装する",
  "createdAt": "2022/05/22T23:25:44"
}
方法その1
Jsonの内容をContextに指定し、fromJsonというBuilt-inのFunctionでパースする方法です。
on:
  push
jobs:
  parse_config_json:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set json content to context
        id: set_json_content
        run: |
          content=`cat ./config.json`
          //複数行の場合は特殊文字をパース可能な文字に置き換える
          content="${content//'%'/'%25'}"
          content="${content//$'\n'/'%0A'}"
          content="${content//$'\r'/'%0D'}"
          echo "::set-output name=configJson::$content"
      - name: Echo
        run: |
          echo "Title is \"$TITLE\"."
        env:
          TITLE: ${{fromJson(steps.set_json_content.outputs.configJson).title}}
Json fileの値がパースできて、titleの値が取得できています!

参考
方法その2
Jsonの内容をjqコマンドでパースする方法です。パースして取得した値をGITHUB_ENVにセットして、他のStepでも使えるようにしています。
on:
  push
jobs:
  parse_config_json:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set title to GITHUB_ENV
        run: |
          title=$(cat ./${ISSUE_NUMBER}/config.json | jq -r .title)
          echo "TITLE=${title}" >> $GITHUB_ENV
      - name: Echo
        run: |
          echo "Title is \"$TITLE\"."
Json fileの値がパースできて、titleの値が取得できています!

おわりに
GitHub ActionsでRepository内のJson fileをパースしてみました。
jqコマンドが使えない環境でばければ、記述がよりシンプルとなる方法2で良いかと思います。
参考
以上












