JSON データとらめっこしたり値を拾ってコピペしたり、なんて作業をしてると(主に AWS-CLI の出力だったりしますがw)、以下の理由でちょっとつらみを感じたりします。
そんな時「YAML だったら少しは読みやすくなるのになぁ、あそうだ、jq があるんだから yq もきっとあるよぬ」ってなって発見したのがこれ。
jq に YAML/XML/TOML のプロセッシング機能を追加した、Python 製ラッパーだそうです。持ってると幸せになれそうなので、早速インストールしてみます。
pip 以外でも apt, dnf, brew 等のパッケージマネージャからもインストールできそうですが、ちょっと試すだけなので Docker コンテナにしておきます。LinuxServer.io からイメージが提供されてるので、こいつを採用。
インストールと言っても、docker pull linuxserver/yq
してから ~/.bashrc や ~/.bash_profile 等に以下のエイリアス設定を追記するだけ。
alias yq='docker run -i --rm -v "$PWD:$PWD" -w="$PWD" --entrypoint yq linuxserver/yq'
さて、動作確認用のサンプルとしてこんな JSON ファイルを用意します。
{ "name": "竈門炭治郎", "age": 15, "address": { "city": "東京", "country": "日本" }, "styles": [ "水の呼吸", "日の呼吸" ], "friends": [ { "name": "我妻善逸", "style": "雷の呼吸" }, { "name": "嘴平伊之助", "style": "獣の呼吸" } ] }
YAML に変換してみます。
yq -y . sample.json
はい、できました。
name: 竈門炭治郎 age: 15 address: city: 東京 country: 日本 styles: - 水の呼吸 - 日の呼吸 friends: - name: 我妻善逸 style: 雷の呼吸 - name: 嘴平伊之助 style: 獣の呼吸
オプション -y の代わりに -Y にすると、値がフロースタイル表記になります↓。コンパクトにはなりますが、読みやすさや文字列エスケープの点で利点が損なわれるので、ケースバイケースですね。
name: "竈門炭治郎" age: 15 address: {city: "東京", country: "日本"} styles: ["水の呼吸", "日の呼吸"] friends: [{name: "我妻善逸", style: "雷の呼吸"}, {name: "嘴平伊之助", style: "獣の呼吸"}]
という訳で、使用感はイイ感じでした。ドキュメントはこちら↓から。