この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
- シェルスクリプト内で
- とある YAML ファイル(あるいはデータ)を
- JSON で出力したい時
例えば「 sample.yaml
」ファイルを JSON 形式に変換したい場合は、下記のようにするとできます。
ruby -rjson -ryaml -e 'print YAML.load(STDIN.read).to_json' < sample.yaml
# 出力 : JSON
もちろんパイプで入力してもいいですし、結果を jq
コマンドなどに喰わせてもいいです。
cat sample.yaml | \
ruby -rjson -ryaml -e 'print YAML.load(STDIN.read).to_json' | \
jq .
シェルスクリプト内なら、関数にしてしまうと使い勝手がいいですね。
function yaml_to_json(){
ruby -rjson -ryaml -e 'print YAML.load(STDIN.read).to_json'
}
filename=sample.yaml
yaml_to_json < ${filename} | jq .
ちなみに yq
という、 jq ライクに YAML を扱うツールもあるので、普段使いならそちらが楽でおすすめです。
kislyuk/yq: Command-line YAML and XML processor - jq wrapper for YAML/XML documents
ただしシェルスクリプトとなると、可搬性などを考えるとなるべく依存するコマンドは OS で標準に備わっているものを使う方がいいかなと。
こういうとき、YAML を扱うのにモジュールを追加インストールする必要がない Ruby は便利ですね。
ちなみに (1)
逆に JSON -> YAML と変換したい場合は、下記のようになります。
ruby -rjson -ryaml -e 'print JSON.parse(STDIN.read).to_yaml' < sample.json
# 出力 : YAML
こちらもご参考ください。メソッドで書くか関数で書くかは好みの問題ですかね。
ちなみに (2)
yq
には 2種類あって、macOS の場合 brew
でインストールするタイプのものもあります。使われる場合はお好みでどうぞ。