yq/pkg/yqlib/doc/operators/entries.md
2023-05-02 15:07:04 +10:00

1.8 KiB

Entries

Similar to the same named functions in jq these functions convert to/from an object and an array of key-value pairs. This is most useful for performing operations on keys of maps.

to_entries Map

Given a sample.yml file of:

{a: 1, b: 2}

then

yq 'to_entries' sample.yml

will output

- key: a
  value: 1
- key: b
  value: 2

to_entries Array

Given a sample.yml file of:

[a, b]

then

yq 'to_entries' sample.yml

will output

- key: 0
  value: a
- key: 1
  value: b

to_entries null

Given a sample.yml file of:

[]

then

yq 'to_entries' sample.yml

will output

[]

from_entries map

Given a sample.yml file of:

{a: 1, b: 2}

then

yq 'to_entries | from_entries' sample.yml

will output

- a
- 1
- b
- 2

from_entries with numeric key indices

from_entries always creates a map, even for numeric keys

Given a sample.yml file of:

[a, b]

then

yq 'to_entries | from_entries' sample.yml

will output

- 0
- a
- 1
- b

Use with_entries to update keys

Given a sample.yml file of:

{a: 1, b: 2}

then

yq 'with_entries(.key |= "KEY_" + .)' sample.yml

will output

- KEY_a
- 1
- KEY_b
- 2

Custom sort map keys

Use to_entries to convert to an array of key/value pairs, sort the array using sort/sort_by/etc, and convert it back.

Given a sample.yml file of:

{a: 1, c: 3, b: 2}

then

yq 'to_entries | sort_by(.key) | reverse | from_entries' sample.yml

will output

!!tag
- c
- 3
- b
- 2
- a
- 1

Use with_entries to filter the map

Given a sample.yml file of:

{a: {b: bird}, c: {d: dog}}

then

yq 'with_entries(select(.value | has("b")))' sample.yml

will output

- a
- {b: bird}