jq コマンドの Alternative operator: //
が欠落値を代替できて便利なのでメモしておく。
jq のバージョン。
$ jq --version jq-1.6
使い方
学生の名簿がこんな感じの JSON になってるとき、age
フィールドがあったら age
フィールドを出力して age
フィールドがなかったら 2022 - year_of_birth
フィールドの計算結果を出力したい要件があるとする。
こんなときは //
を使うととても簡潔に記述できる。便利。
$ cat students.json | jq { "students": [ { "name": "Alice", "age": 20 }, { "name": "Bob", "year_of_birth": 2001 } ] } $ cat students.json | jq '.students[] | .age // 2022 - .year_of_birth' 20 21
age
フィールドがなかったら 2022 - year_of_birth
フィールドの計算結果を age
フィールドに入れ込んだりもできる。
$ cat students.json | jq '.students[] | .age = (.age // 2022 - .year_of_birth)' { "name": "Alice", "age": 20 } { "name": "Bob", "year_of_birth": 2001, "age": 21 }
一応、if-then-else
を使っても同じことができる。
$ cat students.json | jq '.students[] | if .age then .age = .age else .age = 2022 - .year_of_birth end' { "name": "Alice", "age": 20 } { "name": "Bob", "year_of_birth": 2001, "age": 21 }