わたねこコーリング

野良プログラマ発、日々のアウトプット

読みにくい JSON データは yq で YAML に変換!

JSON データとらめっこしたり値を拾ってコピペしたり、なんて作業をしてると(主に AWS-CLI の出力だったりしますがw)、以下の理由でちょっとつらみを感じたりします。

  • URI 文字列等はエスケープが多くて、コピペの際に加工が必要になる。
  • めっちゃ長いデータがブラケットや閉じ括弧で余計に見た目長くなる。

そんな時「YAML だったら少しは読みやすくなるのになぁ、あそうだ、jq があるんだから yq もきっとあるよぬ」ってなって発見したのがこれ。

github.com

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: "獣の呼吸"}]

という訳で、使用感はイイ感じでした。ドキュメントはこちら↓から。

kislyuk.github.io