1

Here is jq getting field a1:

$ echo '{"a": {"a1": 1}, "b": {"a1": 2}}' | jq -r ".[] | .a1"
1
2

I'd like to get the keys a and b as well, and output a flat result, i.e.

$ echo '{"a": {"a1": 1}, "b": {"a1": 2}}' | jq -r "<magic here>"
a 1
b 2

Suggestions?

dfrankow
  • 20,191
  • 41
  • 152
  • 214

2 Answers2

4

I guess I found an answer:

$ echo '{"a": {"a1": 1}, "b": {"a1": 2}}' | \
   jq -r 'to_entries[] | [.key, .value.a1] | @tsv'
a   1
b   2
oguz ismail
  • 1
  • 16
  • 47
  • 69
dfrankow
  • 20,191
  • 41
  • 152
  • 214
1

Here's an alternative using keys (or keys_unsorted):

$ echo '{"a": {"a1": 1}, "b": {"a1": 2}}' |
   jq -r 'keys[] as $key | [$key, .[$key].a1] | @tsv'
a   1
b   2
pmf
  • 24,478
  • 2
  • 22
  • 31