概要
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