Format

Description

Allows you to format dasel output according to the given template.

Usage

Pass the --format flag to select commands.

Available in select commands since v1.18.0.

Functions and accessors

The root context . is equal to the node found at the given selector.

It is recommended that you use the select function with a selector to access values, but you can access properties in the path with .field.subField if preferred.

Function
Description

select "selector"

Returns the node at the given selector.

selectMultiple "selector"

Returns a list of nodes found for the given selector.

query

Alias of select.

queryMultiple

Alias of selectMultiple.

isFirst

Returns true if the node being formatted is the first in a list of selected nodes.

isLast

Returns true if the node being formatted is the last in a list of selected nodes.

format "template"

Allows recursive calls to the formatting capability. Useful when using a selectMultiple.

newline

Returns a newline character.

Dasel also provides access to sprig functions within templates to allow more functionality.

The templates are parsed using golang's text/template package so dasel also supports an array of conditional and loop statements by default.

Description
Example

If condition

{{ if x }} x is true {{ else }} x is false {{ end }}

If not condition

{{ if not x }} x is false {{ else }} x is true {{ end }}

Range

Numbers:

{{ range .numbers -}} - {{ . }}

{{ end }}

For more information refer to the related documentation.

Example

Select

$ echo '[
  {"name": "Tom", "email": "[email protected]"},
  {"name": "Jim", "email": "[email protected]"}
]' | dasel -p json -m \
  --format '{{ select ".name" }},{{ select ".email" }}' \
  '.[*]'
Tom,[email protected]
Jim,[email protected]

SelectMultiple

$ echo '[
  {"name": "Tom", "emails": [
    {"email": "[email protected]", "primary": true},
    {"email": "[email protected]", "primary": false}
  ]},
  {"name": "Jim", "emails": [
    {"email": "[email protected]", "primary": false},
    {"email": "[email protected]", "primary": true}
  ]}
]' | dasel -p json -m \
  --format '{{ select ".name" }}:{{ newline }}{{ selectMultiple ".emails.[*]" | format "- {{ select \".email\" }}, {{ select \".primary\" }}{{ if not isLast }}{{ newline }}{{ end }}" }}' \
  '.[*]'
Tom:
- [email protected], true
- [email protected], false
Jim:
- [email protected], false
- [email protected], true

Last updated