chickadee » sq


sq is a jq wrapper for S-expressions.

Specifically, it round-trips SRFI-180-formatted inputs through jq, allowing you to use that program's filters and flags to manipulate Scheme data.

Think of it like yq, but for S-expressions instead of YAML.


Use your distribution's package manager to install CHICKEN 5.2 or newer, then run:

chicken-install sq

Because sq calls jq internally, you will also need to install jq according to the download instructions for your platform.


Invoke sq just like you would jq. It accepts either S-expressions or JSON as input. When S-expressions are used, they must follow the format described by SRFI-180, for which the mapping between JSON types and Scheme objects is the following:

By default, sq generates S-expressions:

$ echo '{"greeting": "hello"}'  | sq
((greeting . "hello"))
$ echo '((greeting . "hello"))' | sq
((greeting . "hello"))

To generate JSON instead, pass the -j or --json flag:

$ echo '{"greeting": "hello"}'  | sq --json
  "greeting": "hello"
$ echo '((greeting . "hello"))' | sq --json
  "greeting": "hello"

Any other flags (apart from --help and --version) are passed directly through to jq. For example, use the -r or --raw-output flag to output string values:

$ echo '{"greeting": "hello"}'  | sq --raw-output .greeting
$ echo '((greeting . "hello"))' | sq --raw-output .greeting

Note that not all flags will work with sq. For example, the --color-output flag will only work when combined with --json, and the --null-input flag is obviously useless since sq works by sending input to jq.

Known Problems


This software is provided under the terms of the 3-clause BSD license.

The SRFI-180 implementation is Copyright © Amirouche Boubekki.