2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

1分で、分かるよ。貴方が!jqコマンドを!

Last updated at Posted at 2021-09-09

仕事で良くできているシェルシステムをいじる機会がありますが、シェルで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やバイナリーのようですね。

公式HPはこちら 

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がありましたら習いたいと思います。

#レファレンス
https://stedolan.github.io/jq/manual/

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?