LoginSignup
5
2

yq で JSON ⇔ YAML の相互変換

Last updated at Posted at 2022-09-10

概要

yq コマンドを用いて JSON ⇔ YAML の相互変換を行う。

Install

最初に Mac 環境で yqをインストールする。

% brew install yq

環境

環境としては、カレントディレクトリに 以下の commands.jsonが存在している。

% cat commands.json
{
  "commands": [
    {"name": "ls", "desc": "list files"},
    {"name": "echo", "desc": "echo values"}
  ]
}

変換:json ⇒ yaml

最初に json ⇒ yaml の変換を行う。出力は標準出力に向けられている。
-P でPretty Print 指定にすると yaml 形式になる)

% yq -P commands.json
commands:
  - name: ls
    desc: list files
  - name: echo
    desc: echo values

リダイレクトすれば ファイル出力が可能(以降のコマンドも同様)

% yq -P commands.json > commands.yml

Ubuntu環境では以下のように実施

$ cat commands.json | yq -y
commands:
  - name: ls
    desc: list files
  - name: echo
    desc: echo values

変換:yaml ⇒ json

次に yaml ⇒ json の変換をする。標準出力で確認するがリダイレクトも可能。

% yq -o json commands.yml
{
  "commands": [
    {
      "name": "ls",
      "desc": "list files"
    },
    {
      "name": "echo",
      "desc": "echo values"
    }
  ]
}

Ubuntu環境では以下のように実施

$ cat commands.yml | yq
{
  "commands": [
    {
      "name": "ls",
      "desc": "list files"
    },
    {
      "name": "echo",
      "desc": "echo values"
    }
  ]
}

変換:その他

蛇足だが xml や properties にも変換可能なようだ。使うかは別として。

% yq -o xml commands.json
<commands>
  <name>ls</name>
  <desc>list files</desc>
</commands>
<commands>
  <name>echo</name>
  <desc>echo values</desc>
</commands>
% yq -o props commands.json
commands.0.name = ls
commands.0.desc = list files
commands.1.name = echo
commands.1.desc = echo values
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2