やりたいこと
以下のような構造のJSONがあるとして
{ "issue": { "id": XX, "project": { "id": 8, "name": "Test" }, "tracker": { "id": 10, "name": "Task" }, ...
nameの値だけを取り出す。ただし、nameの場所がどの入れ子の深さにあるかは指定しない。
環境情報
$ jq --version jq-1.6
やり方
以下のように指定することで
$ cat test.json | jq "..|.name?|select(.!=null)"
全てのアイテムにてnameという名前のフィールドを再帰的に検索して表示ができる。
以下、補足です。
補足
kubectlなどでは以下のような構文で冒頭の表示が実現できますが、それはjqコマンドでも実現できます。
$ kubectl get pods --all-namespaces -o jsonpath="{..image}"
検索条件として
jq "..|.name?"
でも欲しい値の取得はできますが、そうすると一致しない箇所が以下のように出力されてしまうので
null null null
以下にて抽出条件を付与しています。
select(.!=null)
以上。