2

This

echo '{"a":[{"b":[{"c":"xxx"}]},{"b":[{"c":"yyy"},{"c":"zzz"}]}]}' |
    jq '.a[].b | map({"c": .c})'

produces this:

[
  {
    "c": "xxx"
  }
]
[
  {
    "c": "yyy"
  },
  {
    "c": "zzz"
  }
]

How do I get a single output array like:

[
  {
    "c": "xxx"
  },
  {
    "c": "yyy"
  },
  {
    "c": "zzz"
  }
]
Benjamin W.
  • 46,058
  • 19
  • 106
  • 116
clay
  • 18,138
  • 28
  • 107
  • 192

3 Answers3

2
$ jq [.[][][][]] <<< "$JSON"
[
  {
    "c": "xxx"
  },
  {
    "c": "yyy"
  },
  {
    "c": "zzz"
  }
]

OR:

$ jq '[.. | select(has("c")?)]' <<< "$JSON"
[
  {
    "c": "xxx"
  },
  {
    "c": "yyy"
  },
  {
    "c": "zzz"
  }
]
peak
  • 105,803
  • 17
  • 152
  • 177
1

You can use this:

jq '[{"c":(.a[].b[].c)}]' file.json
hek2mgl
  • 152,036
  • 28
  • 249
  • 266
1

This does it:

jq '[ .a[][][] ]'
Benjamin W.
  • 46,058
  • 19
  • 106
  • 116