仕事で良くできているシェルシステムをいじる機会がありますが、シェルでJSON形式を操作する必要がありました。シェルは条件分を作成するさえややこしくて、シェル主力ではない場合はかなり生産性が低くなります。それでjqコマンドみたいなutilコマンドは大変助かります。今回はjqコマンドを触った感触と例を紹介していきたいと思います。
#環境
※ macでbashが使いたい方は、「1分で、macのシェル種類を切り替え」へ
- シェルはbash
- macOS Big Sur 11.3.1
#実施
1. jqコマンドが使える状態か確認
jq --version
なかったら、インストールしましょう
2. jqコマンドUtilをインストール
Macなので今回はbrewでインストールします。
brew install jq
linuxでしたらこうやって
apt-get install jq # Debian or Ubuntu
windowsならchocolatetyやバイナリーのようですね。
3. jqを使ってみる
基本形は下記になります。'.'のarg項目は「identify filter」と呼ばれます。
jq '.'
{"open": "tone"}
> {
> "open": "tone"
> }
このようにJSONの形式になります。
jqの役割はjsonのデータをINPUTにして
json形式がOUTPUTとなります。つまり、jsonパーサーなんです。
4. jqをパイプラインで使ってみる
パイプライン( | )をつけて使うとより効果的になります。
つまり、filterと飛ばれた '.'にjsonの「key」をつけて「value」だけを取得できます。
echo '{"foo": "bar", "hoge": "piyo"}' | jq '.foo'
> "bar"
5. JSONファイルからパーシング
読み込むjsonファイルパスは第2引数として指定できます。
これでファイルからのパーシングもOKです。
echo '{"foo": "bar"}' > foobar.json
jq '.' foobar.json
> {
> "foo": "bar"
> }
#結論
シェルプログラミングは強力ですが、どうしても生産性が低くなる傾向があります。
その時に、迷わずにjqコマンドようなUtilを使った方が一般的には断然にいいと思います。
他にもいいUtilがありましたら習いたいと思います。