forked from Telodendria/Telodendria
112 lines
3.3 KiB
Groff
112 lines
3.3 KiB
Groff
|
.Dd $Mdocdate: March 12 2023 $
|
||
|
.Dt JSON 1
|
||
|
.Os Telodendria Project
|
||
|
.Sh NAME
|
||
|
.Nm json
|
||
|
.Nd A simple command line utility for parsing and generating JSON.
|
||
|
.Sh SYNOPSIS
|
||
|
.Nm
|
||
|
.Op Fl s Ar query
|
||
|
.Op Fl e Ar str
|
||
|
.Sh DESCRIPTION
|
||
|
.Nm
|
||
|
is a simple command line utility for dealing with JSON. It is
|
||
|
somewhat inspired by
|
||
|
.Xr jq 1 ,
|
||
|
but is not compatible in any way with it.
|
||
|
.Nm
|
||
|
is designed to be much simpler than
|
||
|
.Xr jq 1 ,
|
||
|
and is built on Telodendria's own
|
||
|
.Xr Json 3
|
||
|
API. It primarily exists to ease development of Telodendria, and
|
||
|
to make development possible without having to install any external
|
||
|
tools.
|
||
|
.Pp
|
||
|
The options are as follows. Unless stated otherwise, these options
|
||
|
are mutually exclusive, and the last one specified takes precedence.
|
||
|
All positional parameters are ignored.
|
||
|
.Bl -tag -width Ds
|
||
|
.It Fl s Ar query
|
||
|
Use
|
||
|
.Va query
|
||
|
to query a field from a JSON object given on the standard input.
|
||
|
The query syntax very vaguely resembles C code, but it is much
|
||
|
more primitive. Multiple queries are separated by an arrow
|
||
|
(``->''). This makes it trivial to drill down into nested
|
||
|
objects and arrays.
|
||
|
.Pp
|
||
|
To select a value from an object, just specify the key. To select
|
||
|
an element from an array specify the key whose value is the array,
|
||
|
and then use the C square bracket syntax to select an element.
|
||
|
.Pp
|
||
|
A number of ``functions'' exist to make
|
||
|
.Nm
|
||
|
more versatile. Functions are called by prefacing the key with
|
||
|
a ``@'' symbol. Functions can appear anywhere in the query, provided
|
||
|
they make sense within the context of the JSON object being processed.
|
||
|
The available functions are as follows:
|
||
|
.Bl -tag -width Ds
|
||
|
.It keys
|
||
|
When applied to an object, outputs an array of keys.
|
||
|
.It length
|
||
|
When applied to an array, outputs the number of elements in the
|
||
|
array. When applied to a string, returns the number of bytes
|
||
|
needed to store the decoded version of the string.
|
||
|
.It decode
|
||
|
When applied to a string, outputs the decoded version of the
|
||
|
string.
|
||
|
.El
|
||
|
.Pp
|
||
|
When a key is prefaced with the ``^'' symbol, then instead of getting
|
||
|
the value at that key, it is removed from the object, and the new
|
||
|
object is passed along.
|
||
|
.It Fl e Ar str
|
||
|
Encode
|
||
|
.Va str
|
||
|
as a JSON string and print it to standard output. This is useful for
|
||
|
generating JSON with shell scripts.
|
||
|
.El
|
||
|
.Pp
|
||
|
If no options are specified, then the default behavior of
|
||
|
.Nm
|
||
|
is to read a JSON object given on the standard input and pretty-print
|
||
|
it to the standard output, or print an error to standard error if
|
||
|
the given input is invalid.
|
||
|
.Sh EXAMPLES
|
||
|
.Pp
|
||
|
Get the error string of an error returned by a Matrix API endpoint:
|
||
|
.Bd -literal -offset indent
|
||
|
json -s 'error->@decode'
|
||
|
.Ed
|
||
|
.Pp
|
||
|
Get the number of stages in the first flow listed in a list
|
||
|
of user-interactive authentication flows:
|
||
|
.Bd -literal -offset indent
|
||
|
json -s 'flows[0]->stages->@length'
|
||
|
.Ed
|
||
|
.Pp
|
||
|
Get the first stage of the first flow listed in a list
|
||
|
of user-interactive authentication flows:
|
||
|
.Bd -literal -offset indent
|
||
|
json -s 'flows[0]->stages[0]->@decode'
|
||
|
.Ed
|
||
|
.Pp
|
||
|
List the keys in a JSON object:
|
||
|
.Bd -literal -offset indent
|
||
|
json -s '@keys'
|
||
|
.Ed
|
||
|
.Pp
|
||
|
Get the number of keys in a JSON object:
|
||
|
.Bd -literal -offset indent
|
||
|
json -s '@keys->@length'
|
||
|
.Ed
|
||
|
.Sh EXIT STATUS
|
||
|
.Nm
|
||
|
exits with
|
||
|
.Va EXIT_SUCCESS
|
||
|
if all command line options were valid and the given JSON object
|
||
|
parses successfully. It exits with
|
||
|
.Va EXIT_FAILURE
|
||
|
in all other scenarios.
|