Kind

The kind operator identifies the type of a node as either scalar, map, or seq.

This can be used for filtering or transforming nodes based on their type.

Note that null values are treated as scalar.

Get kind

Given a sample.yml file of:

a: cat
b: 5
c: 3.2
e: true
f: []
g: {}
h: null

then

yq '.. | kind' sample.yml

will output

map
scalar
scalar
scalar
scalar
seq
map
scalar

Get kind, ignores custom tags

Unlike tag, kind is not affected by custom tags.

Given a sample.yml file of:

a: !!thing cat
b: !!foo {}
c: !!bar []

then

yq '.. | kind' sample.yml

will output

map
scalar
map
seq

Add comments only to scalars

An example of how you can use kind

Given a sample.yml file of:

a:
  b: 5
  c: 3.2
e: true
f: []
g: {}
h: null

then

yq '(.. | select(kind == "scalar")) line_comment = "this is a scalar"' sample.yml

will output

a:
  b: 5 # this is a scalar
  c: 3.2 # this is a scalar
e: true # this is a scalar
f: []
g: {}
h: null # this is a scalar

Last updated