(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【JSON】jqコマンドで階層を問わずに指定した項目/アイテムを表示する

スポンサーリンク

やりたいこと

以下のような構造の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)

以上。