[jq] 条件分岐を使ってアホになる方法

2019年4月14日

jq テクノロジー プログラミング

便利なjqコマンドを使っていると、次第にawkのように使いたくなってきます。 awkはcsvのような文字split系では威力を発揮できますが、jsonのような パース処理が必要な形式には向かないので、今どきのAPIからデータ取得した場合などではjqを利用する事も多々あります。 そしてjqコマンドはawkのようにかなりのプログラミングに対応できるという事を理解しましょう。 非常に高機能なデータ操作ツールなのです。 今回はjqコマンドで条件分岐のサンプルをいくつか作って紹介したいと思います。 これまでjqコマンドでパースして任意の値を取り出すだけしか使えていなかった人は、条件分岐を覚えてもっとスマートなツール構築を行ってみませんか?

jqのif文使用方法

今回の操作で使用するサンプルデータです。 {"id":"1","name":"aaa"} {"id":"2","name":"bbb"} {"id":"3","name":"ccc"} {"id":"4","name":"ddd"} {"id":"5","name":"eee"} このデータのname値だけを取得したい場合は、 jq --slurp '.[] | .name' sample.data "aaa" "bbb" "ccc" "ddd" "eee" そして、このデータのidが"3"の時だけ、nameの値を変更してみたいと思います。 jq --slurp '.[] | if .id == "アホ" then "test" else .name end' sample.json "aaa" "bbb" "アホ" "ddd" "eee" いかがですか? プログラムを普段から書いている人はさほど難しくない事が分かると思います。

公文解説

if   "条件文" then   "trueの時の出力" elif   "別の条件文" then   "別の条件文がtrueの時の出力" else   "それ以外の出力" end elifは、書かなくてもいいし、何個でも書き足すことも可能です。 注意点としては、最後は必ず"end"で締めくくりましょう。 jqコマンドは基本的にワンライナーで記述するため、if文を書く時は()カッコでくくってあげると、比較的見やすいコマンド文になります。

ワンランク上の使い方

条件文は文字判定だけでなく、各種演算や等号、不等号などを使っての判定も可能で、他のプログラム言語のように"true"と"false"のboolean判定で記述でき、and,orなどで複数を繋げて判定することも可能です。 jqコマンドで少し難しく感じるのは、if文を記述するタイミングで、データのどの階層を判定するのかを見失うと非常に辛くなるので、今現在の階層を見失わないように管理をしっかりしないといけないワケです。 これで、あなたも「世界のなべあつ」ツールを簡単に作ることができますね。 Let's try !!!

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。