Open1

jq スニペット

Takayuki OdaTakayuki Oda

「オブジェクトの配列」から条件にマッチするオブジェクトの index を取得する。

$ cat data.json
[{ "name": "A", "value": 1 }, { "name":  "B", "value": 20 }, { "name": "C", "value": 100 }]
$ jq 'map(.name == "B") | index(true)' data.json
1

ポイント

index関数 には値しか渡すことができない。
なので index(.name == "B") みたいな書き方ができない。
そこで、まずはmap関数 を使って目当てのオブジェクトのみ true にする。その後配列の中で true になっている要素の index を index(true) で返させている。

利用シーン

json を読み込んで処理を行うプログラムが実行中に止まったから、「続きから実行させるための json を生成するには。。。」と思って調べてた

見つけた場所

https://stackoverflow.com/a/41963541