.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "JQ" "1" "December 2017" "" ""
.
.SH "NAME"
\fBjq\fR \- Command\-line JSON processor
.
.SH "SYNOPSIS"
\fBjq\fR [\fIoptions\fR\.\.\.] \fIfilter\fR [\fIfiles\fR\.\.\.]
.
.P
\fBjq\fR can transform JSON in various ways, by selecting, iterating, reducing and otherwise mangling JSON documents\. For instance, running the command \fBjq \'map(\.price) | add\'\fR will take an array of JSON objects as input and return the sum of their "price" fields\.
.
.P
\fBjq\fR can accept text input as well, but by default, \fBjq\fR reads a stream of JSON entities (including numbers and other literals) from \fBstdin\fR\. Whitespace is only needed to separate entities such as 1 and 2, and true and false\. One or more \fIfiles\fR may be specified, in which case \fBjq\fR will read input from those instead\.
.
.P
The \fIoptions\fR are described in the \fIINVOKING JQ\fR section; they mostly concern input and output formatting\. The \fIfilter\fR is written in the jq language and specifies how to transform the input file or document\.
.
.SH "FILTERS"
A jq program is a "filter": it takes an input, and produces an output\. There are a lot of builtin filters for extracting a particular field of an object, or converting a number to a string, or various other standard tasks\.
.
.P
Filters can be combined in various ways \- you can pipe the output of one filter into another filter, or collect the output of a filter into an array\.
.
.P
Some filters produce multiple results, for instance there\'s one that produces all the elements of its input array\. Piping that filter into a second runs the second filter for each element of the array\. Generally, things that would be done with loops and iteration in other languages are just done by gluing filters together in jq\.
.
.P
It\'s important to remember that every filter has an input and an output\. Even literals like "hello" or 42 are filters \- they take an input but always produce the same literal as output\. Operations that combine two filters, like addition, generally feed the same input to both and combine the results\. So, you can implement an averaging filter as \fBadd / length\fR \- feeding the input array both to the \fBadd\fR filter and the \fBlength\fR filter and then performing the division\.
.
.P
But that\'s getting ahead of ourselves\. :) Let\'s start with something simpler:
.
.SH "INVOKING JQ"
jq filters run on a stream of JSON data\. The input to jq is parsed as a sequence of whitespace\-separated JSON values which are passed through the provided filter one at a time\. The output(s) of the filter are written to standard out, again as a sequence of whitespace\-separated JSON data\.
.
.P
Note: it is important to mind the shell\'s quoting rules\. As a general rule it\'s best to always quote (with single\-quote characters) the jq program, as too many characters with special meaning to jq are also shell meta\-characters\. For example, \fBjq "foo"\fR will fail on most Unix shells because that will be the same as \fBjq foo\fR, which will generally fail because \fBfoo is not defined\fR\. When using the Windows command shell (cmd\.exe) it\'s best to use double quotes around your jq program when given on the command\-line (instead of the \fB\-f program\-file\fR option), but then double\-quotes in the jq program need backslash escaping\.
.
.P
You can affect how jq reads and writes its input and output using some command\-line options:
.
.IP "\(bu" 4
\fB\-\-version\fR:
.
.IP
Output the jq version and exit with zero\.
.
.IP "\(bu" 4
\fB\-\-seq\fR:
.
.IP
Use the \fBapplication/json\-seq\fR MIME type scheme for separating JSON texts in jq\'s input and output\. This means that an ASCII RS (record separator) character is printed before each value on output and an ASCII LF (line feed) is printed after every output\. Input JSON texts that fail to parse are ignored (but warned about), discarding all subsequent input until the next RS\. This mode also parses the output of jq without the \fB\-\-seq\fR option\.
.
.IP "\(bu" 4
\fB\-\-stream\fR:
.
.IP
Parse the input in streaming fashion, outputing arrays of path and leaf values (scalars and empty arrays or empty objects)\. For example, \fB"a"\fR becomes \fB[[],"a"]\fR, and \fB[[],"a",["b"]]\fR becomes \fB[[0],[]]\fR, \fB[[1],"a"]\fR, and \fB[[1,0],"b"]\fR\.
.
.IP
This is useful for processing very large inputs\. Use this in conjunction with filtering and the \fBreduce\fR and \fBforeach\fR syntax to reduce large inputs incrementally\.
.
.IP "\(bu" 4
\fB\-\-slurp\fR/\fB\-s\fR:
.
.IP
Instead of running the filter for each JSON object in the input, read the entire input stream into a large array and run the filter just once\.
.
.IP "\(bu" 4
\fB\-\-raw\-input\fR/\fB\-R\fR:
.
.IP
Don\'t parse the input as JSON\. Instead, each line of text is passed to the filter as a string\. If combined with \fB\-\-slurp\fR, then the entire input is passed to the filter as a single long string\.
.
.IP "\(bu" 4
\fB\-\-null\-input\fR/\fB\-n\fR:
.
.IP
Don\'t read any input at all! Instead, the filter is run once using \fBnull\fR as the input\. This is useful when using jq as a simple calculator or to construct JSON data from scratch\.
.
.IP "\(bu" 4
\fB\-\-compact\-output\fR / \fB\-c\fR:
.
.IP
By default, jq pretty\-prints JSON output\. Using this option will result in more compact output by instead putting each JSON object on a single line\.
.
.IP "\(bu" 4
\fB\-\-tab\fR:
.
.IP
Use a tab for each indentation level instead of two spaces\.
.
.IP "\(bu" 4
\fB\-\-indent n\fR:
.
.IP
Use the given number of spaces (no more than 8) for indentation\.
.
.IP "\(bu" 4
\fB\-\-color\-output\fR / \fB\-C\fR and \fB\-\-monochrome\-output\fR / \fB\-M\fR:
.
.IP
By default, jq outputs colored JSON if writing to a terminal\. You can force it to produce color even if writing to a pipe or a file using \fB\-C\fR, and disable color with \fB\-M\fR\.
.
.IP
Colors can be configured with the \fBJQ_COLORS\fR environment variable (see below)\.
.
.IP "\(bu" 4
\fB\-\-ascii\-output\fR / \fB\-a\fR:
.
.IP
jq usually outputs non\-ASCII Unicode codepoints as UTF\-8, even if the input specified them as escape sequences (like "\eu03bc")\. Using this option, you can force jq to produce pure ASCII output with every non\-ASCII character replaced with the equivalent escape sequence\.
.
.IP "\(bu" 4
\fB\-\-unbuffered\fR
.
.IP
Flush the output after each JSON object is printed (useful if you\'re piping a slow data source into jq and piping jq\'s output elsewhere)\.
.
.IP "\(bu" 4
\fB\-\-sort\-keys\fR / \fB\-S\fR:
.
.IP
Output the fields of each object with the keys in sorted order\.
.
.IP "\(bu" 4
\fB\-\-raw\-output\fR / \fB\-r\fR:
.
.IP
With this option, if the filter\'s result is a string then it will be written directly to standard output rather than being formatted as a JSON string with quotes\. This can be useful for making jq filters talk to non\-JSON\-based systems\.
.
.IP "\(bu" 4
\fB\-\-join\-output\fR / \fB\-j\fR:
.
.IP
Like \fB\-r\fR but jq won\'t print a newline after each output\.
.
.IP "\(bu" 4
\fB\-f filename\fR / \fB\-\-from\-file filename\fR:
.
.IP
Read filter from the file rather than from a command line, like awk\'s \-f option\. You can also use \'#\' to make comments\.
.
.IP "\(bu" 4
\fB\-Ldirectory\fR / \fB\-L directory\fR:
.
.IP
Prepend \fBdirectory\fR to the search list for modules\. If this option is used then no builtin search list is used\. See the section on modules below\.
.
.IP "\(bu" 4
\fB\-e\fR / \fB\-\-exit\-status\fR:
.
.IP
Sets the exit status of jq to 0 if the last output values was neither \fBfalse\fR nor \fBnull\fR, 1 if the last output value was either \fBfalse\fR or \fBnull\fR, or 4 if no valid result was ever produced\. Normally jq exits with 2 if there was any usage problem or system error, 3 if there was a jq program compile error, or 0 if the jq program ran\.
.
.IP
Another way to set the exit status is with the \fBhalt_error\fR builtin function\.
.
.IP "\(bu" 4
\fB\-\-arg name value\fR:
.
.IP
This option passes a value to the jq program as a predefined variable\. If you run jq with \fB\-\-arg foo bar\fR, then \fB$foo\fR is available in the program and has the value \fB"bar"\fR\. Note that \fBvalue\fR will be treated as a string, so \fB\-\-arg foo 123\fR will bind \fB$foo\fR to \fB"123"\fR\.
.
.IP
Named arguments are also available to the jq program as \fB$ARGS\.named\fR\.
.
.IP "\(bu" 4
\fB\-\-argjson name JSON\-text\fR:
.
.IP
This option passes a JSON\-encoded value to the jq program as a predefined variable\. If you run jq with \fB\-\-argjson foo 123\fR, then \fB$foo\fR is available in the program and has the value \fB123\fR\.
.
.IP "\(bu" 4
\fB\-\-slurpfile variable\-name filename\fR:
.
.IP
This option reads all the JSON texts in the named file and binds an array of the parsed JSON values to the given global variable\. If you run jq with \fB\-\-argfile foo bar\fR, then \fB$foo\fR is available in the program and has an array whose elements correspond to the texts in the file named \fBbar\fR\.
.
.IP "\(bu" 4
\fB\-\-argfile variable\-name filename\fR:
.
.IP
Do not use\. Use \fB\-\-slurpfile\fR instead\.
.
.IP
(This option is like \fB\-\-slurpfile\fR, but when the file has just one text, then that is used, else an array of texts is used as in \fB\-\-slurpfile\fR\.)
.
.IP "\(bu" 4
\fB\-\-args\fR:
.
.IP
Remaining arguments are positional string arguments\. These are available to the jq program as \fB$ARGS\.positional[]\fR\.
.
.IP "\(bu" 4
\fB\-\-jsonargs\fR:
.
.IP
Remaining arguments are positional JSON text arguments\. These are available to the jq program as \fB$ARGS\.positional[]\fR\.
.
.IP "\(bu" 4
\fB\-\-run\-tests [filename]\fR:
.
.IP
Runs the tests in the given file or standard input\. This must be the last option given and does not honor all preceding options\. The input consists of comment lines, empty lines, and program lines followed by one input line, as many lines of output as are expected (one per output), and a terminating empty line\. Compilation failure tests start with a line containing only "%%FAIL", then a line containing the program to compile, then a line containing an error message to compare to the actual\.
.
.IP
Be warned that this option can change backwards\-incompatibly\.
.
.IP "" 0
.
.SH "BASIC FILTERS"
.
.SS "Identity: \."
The absolute simplest filter is \fB\.\fR \. This is a filter that takes its input and produces it unchanged as output\. That is, this is the identity operator\.
.
.P
Since jq by default pretty\-prints all output, this trivial program can be a useful way of formatting JSON output from, say, \fBcurl\fR\.
.
.IP "" 4
.
.nf

jq \'\.\'
   "Hello, world!"
=> "Hello, world!"
.
.fi
.
.IP "" 0
.
.SS "Object Identifier\-Index: \.foo, \.foo\.bar"
The simplest \fIuseful\fR filter is \fB\.foo\fR\. When given a JSON object (aka dictionary or hash) as input, it produces the value at the key "foo", or null if there\'s none present\.
.
.P
A filter of the form \fB\.foo\.bar\fR is equivalent to \fB\.foo|\.bar\fR\.
.
.P
This syntax only works for simple, identifier\-like keys, that is, keys that are all made of alphanumeric characters and underscore, and which do not start with a digit\.
.
.P
If the key contains special characters, you need to surround it with double quotes like this: \fB\."foo$"\fR, or else \fB\.["foo$"]\fR\.
.
.P
For example \fB\.["foo::bar"]\fR and \fB\.["foo\.bar"]\fR work while \fB\.foo::bar\fR does not, and \fB\.foo\.bar\fR means \fB\.["foo"]\.["bar"]\fR\.
.
.IP "" 4
.
.nf

jq \'\.foo\'
   {"foo": 42, "bar": "less interesting data"}
=> 42

jq \'\.foo\'
   {"notfoo": true, "alsonotfoo": false}
=> null

jq \'\.["foo"]\'
   {"foo": 42}
=> 42
.
.fi
.
.IP "" 0
.
.SS "Optional Object Identifier\-Index: \.foo?"
Just like \fB\.foo\fR, but does not output even an error when \fB\.\fR is not an array or an object\.
.
.IP "" 4
.
.nf

jq \'\.foo?\'
   {"foo": 42, "bar": "less interesting data"}
=> 42

jq \'\.foo?\'
   {"notfoo": true, "alsonotfoo": false}
=> null

jq \'\.["foo"]?\'
   {"foo": 42}
=> 42

jq \'[\.foo?]\'
   [1,2]
=> []
.
.fi
.
.IP "" 0
.
.SS "Generic Object Index: \.[<string>]"
You can also look up fields of an object using syntax like \fB\.["foo"]\fR (\.foo above is a shorthand version of this, but only for identifier\-like strings)\.
.
.SS "Array Index: \.[2]"
When the index value is an integer, \fB\.[<value>]\fR can index arrays\. Arrays are zero\-based, so \fB\.[2]\fR returns the third element\.
.
.P
Negative indices are allowed, with \-1 referring to the last element, \-2 referring to the next to last element, and so on\.
.
.IP "" 4
.
.nf

jq \'\.[0]\'
   [{"name":"JSON", "good":true}, {"name":"XML", "good":false}]
=> {"name":"JSON", "good":true}

jq \'\.[2]\'
   [{"name":"JSON", "good":true}, {"name":"XML", "good":false}]
=> null

jq \'\.[\-2]\'
   [1,2,3]
=> 2
.
.fi
.
.IP "" 0
.
.SS "Array/String Slice: \.[10:15]"
The \fB\.[10:15]\fR syntax can be used to return a subarray of an array or substring of a string\. The array returned by \fB\.[10:15]\fR will be of length 5, containing the elements from index 10 (inclusive) to index 15 (exclusive)\. Either index may be negative (in which case it counts backwards from the end of the array), or omitted (in which case it refers to the start or end of the array)\.
.
.IP "" 4
.
.nf

jq \'\.[2:4]\'
   ["a","b","c","d","e"]
=> ["c", "d"]

jq \'\.[2:4]\'
   "abcdefghi"
=> "cd"

jq \'\.[:3]\'
   ["a","b","c","d","e"]
=> ["a", "b", "c"]

jq \'\.[\-2:]\'
   ["a","b","c","d","e"]
=> ["d", "e"]
.
.fi
.
.IP "" 0
.
.SS "Array/Object Value Iterator: \.[]"
If you use the \fB\.[index]\fR syntax, but omit the index entirely, it will return \fIall\fR of the elements of an array\. Running \fB\.[]\fR with the input \fB[1,2,3]\fR will produce the numbers as three separate results, rather than as a single array\.
.
.P
You can also use this on an object, and it will return all the values of the object\.
.
.IP "" 4
.
.nf

jq \'\.[]\'
   [{"name":"JSON", "good":true}, {"name":"XML", "good":false}]
=> {"name":"JSON", "good":true}, {"name":"XML", "good":false}

jq \'\.[]\'
   []
=>

jq \'\.[]\'
   {"a": 1, "b": 1}
=> 1, 1
.
.fi
.
.IP "" 0
.
.SS "\.[]?"
Like \fB\.[]\fR, but no errors will be output if \. is not an array or object\.
.
.SS "Comma: ,"
If two filters are separated by a comma, then the same input will be fed into both and the two filters\' output value streams will be concatenated in order: first, all of the outputs produced by the left expression, and then all of the outputs produced by the right\. For instance, filter \fB\.foo, \.bar\fR, produces both the "foo" fields and "bar" fields as separate outputs\.
.
.IP "" 4
.
.nf

jq \'\.foo, \.bar\'
   {"foo": 42, "bar": "something else", "baz": true}
=> 42, "something else"

jq \'\.user, \.projects[]\'
   {"user":"stedolan", "projects": ["jq", "wikiflow"]}
=> "stedolan", "jq", "wikiflow"

jq \'\.[4,2]\'
   ["a","b","c","d","e"]
=> "e", "c"
.
.fi
.
.IP "" 0
.
.SS "Pipe: |"
The | operator combines two filters by feeding the output(s) of the one on the left into the input of the one on the right\. It\'s pretty much the same as the Unix shell\'s pipe, if you\'re used to that\.
.
.P
If the one on the left produces multiple results, the one on the right will be run for each of those results\. So, the expression \fB\.[] | \.foo\fR retrieves the "foo" field of each element of the input array\.
.
.P
Note that \fB\.a\.b\.c\fR is the same as \fB\.a | \.b | \.c\fR\.
.
.P
Note too that \fB\.\fR is the input value at the particular stage in a "pipeline", specifically: where the \fB\.\fR expression appears\. Thus \fB\.a | \. | \.b\fR is the same as \fB\.a\.b\fR, as the \fB\.\fR in the middle refers to whatever value \fB\.a\fR produced\.
.
.IP "" 4
.
.nf

jq \'\.[] | \.name\'
   [{"name":"JSON", "good":true}, {"name":"XML", "good":false}]
=> "JSON", "XML"
.
.fi
.
.IP "" 0
.
.SS "Parenthesis"
Parenthesis work as a grouping operator just as in any typical programming language\.
.
.IP "" 4
.
.nf

jq \'(\. + 2) * 5\'
   1
=> 15
.
.fi
.
.IP "" 0
.
.SH "TYPES AND VALUES"
jq supports the same set of datatypes as JSON \- numbers, strings, booleans, arrays, objects (which in JSON\-speak are hashes with only string keys), and "null"\.
.
.P
Booleans, null, strings and numbers are written the same way as in javascript\. Just like everything else in jq, these simple values take an input and produce an output \- \fB42\fR is a valid jq expression that takes an input, ignores it, and returns 42 instead\.
.
.SS "Array construction: []"
As in JSON, \fB[]\fR is used to construct arrays, as in \fB[1,2,3]\fR\. The elements of the arrays can be any jq expression, including a pipeline\. All of the results produced by all of the expressions are collected into one big array\. You can use it to construct an array out of a known quantity of values (as in \fB[\.foo, \.bar, \.baz]\fR) or to "collect" all the results of a filter into an array (as in \fB[\.items[]\.name]\fR)
.
.P
Once you understand the "," operator, you can look at jq\'s array syntax in a different light: the expression \fB[1,2,3]\fR is not using a built\-in syntax for comma\-separated arrays, but is instead applying the \fB[]\fR operator (collect results) to the expression 1,2,3 (which produces three different results)\.
.
.P
If you have a filter \fBX\fR that produces four results, then the expression \fB[X]\fR will produce a single result, an array of four elements\.
.
.IP "" 4
.
.nf

jq \'[\.user, \.projects[]]\'
   {"user":"stedolan", "projects": ["jq", "wikiflow"]}
=> ["stedolan", "jq", "wikiflow"]

jq \'[ \.[] | \. * 2]\'
   [1, 2, 3]
=> [2, 4, 6]
.
.fi
.
.IP "" 0
.
.SS "Object Construction: {}"
Like JSON, \fB{}\fR is for constructing objects (aka dictionaries or hashes), as in: \fB{"a": 42, "b": 17}\fR\.
.
.P
If the keys are "identifier\-like", then the quotes can be left off, as in \fB{a:42, b:17}\fR\. Keys generated by expressions need to be parenthesized, e\.g\., \fB{("a"+"b"):59}\fR\.
.
.P
The value can be any expression (although you may need to wrap it in parentheses if it\'s a complicated one), which gets applied to the {} expression\'s input (remember, all filters have an input and an output)\.
.
.IP "" 4
.
.nf

{foo: \.bar}
.
.fi
.
.IP "" 0
.
.P
will produce the JSON object \fB{"foo": 42}\fR if given the JSON object \fB{"bar":42, "baz":43}\fR as its input\. You can use this to select particular fields of an object: if the input is an object with "user", "title", "id", and "content" fields and you just want "user" and "title", you can write
.
.IP "" 4
.
.nf

{user: \.user, title: \.title}
.
.fi
.
.IP "" 0
.
.P
Because that is so common, there\'s a shortcut syntax for it: \fB{user, title}\fR\.
.
.P
If one of the expressions produces multiple results, multiple dictionaries will be produced\. If the input\'s
.
.IP "" 4
.
.nf

{"user":"stedolan","titles":["JQ Primer", "More JQ"]}
.
.fi
.
.IP "" 0
.
.P
then the expression
.
.IP "" 4
.
.nf

{user, title: \.titles[]}
.
.fi
.
.IP "" 0
.
.P
will produce two outputs:
.
.IP "" 4
.
.nf

{"user":"stedolan", "title": "JQ Primer"}
{"user":"stedolan", "title": "More JQ"}
.
.fi
.
.IP "" 0
.
.P
Putting parentheses around the key means it will be evaluated as an expression\. With the same input as above,
.
.IP "" 4
.
.nf

{(\.user): \.titles}
.
.fi
.
.IP "" 0
.
.P
produces
.
.IP "" 4
.
.nf

{"stedolan": ["JQ Primer", "More JQ"]}

jq \'{user, title: \.titles[]}\'
   {"user":"stedolan","titles":["JQ Primer", "More JQ"]}
=> {"user":"stedolan", "title": "JQ Primer"}, {"user":"stedolan", "title": "More JQ"}

jq \'{(\.user): \.titles}\'
   {"user":"stedolan","titles":["JQ Primer", "More JQ"]}
=> {"stedolan": ["JQ Primer", "More JQ"]}
.
.fi
.
.IP "" 0
.
.SS "Recursive Descent: \.\."
Recursively descends \fB\.\fR, producing every value\. This is the same as the zero\-argument \fBrecurse\fR builtin (see below)\. This is intended to resemble the XPath \fB//\fR operator\. Note that \fB\.\.a\fR does not work; use \fB\.\.|\.a\fR instead\. In the example below we use \fB\.\.|\.a?\fR to find all the values of object keys "a" in any object found "below" \fB\.\fR\.
.
.P
This is particularly useful in conjunction with \fBpath(EXP)\fR (also see below) and the \fB?\fR operator\.
.
.IP "" 4
.
.nf

jq \'\.\.|\.a?\'
   [[{"a":1}]]
=> 1
.
.fi
.
.IP "" 0
.
.SH "BUILTIN OPERATORS AND FUNCTIONS"
Some jq operator (for instance, \fB+\fR) do different things depending on the type of their arguments (arrays, numbers, etc\.)\. However, jq never does implicit type conversions\. If you try to add a string to an object you\'ll get an error message and no result\.
.
.SS "Addition: +"
The operator \fB+\fR takes two filters, applies them both to the same input, and adds the results together\. What "adding" means depends on the types involved:
.
.IP "\(bu" 4
\fBNumbers\fR are added by normal arithmetic\.
.
.IP "\(bu" 4
\fBArrays\fR are added by being concatenated into a larger array\.
.
.IP "\(bu" 4
\fBStrings\fR are added by being joined into a larger string\.
.
.IP "\(bu" 4
\fBObjects\fR are added by merging, that is, inserting all the key\-value pairs from both objects into a single combined object\. If both objects contain a value for the same key, the object on the right of the \fB+\fR wins\. (For recursive merge use the \fB*\fR operator\.)
.
.IP "" 0
.
.P
\fBnull\fR can be added to any value, and returns the other value unchanged\.
.
.IP "" 4
.
.nf

jq \'\.a + 1\'
   {"a": 7}
=> 8

jq \'\.a + \.b\'
   {"a": [1,2], "b": [3,4]}
=> [1,2,3,4]

jq \'\.a + null\'
   {"a": 1}
=> 1

jq \'\.a + 1\'
   {}
=> 1

jq \'{a: 1} + {b: 2} + {c: 3} + {a: 42}\'
   null
=> {"a": 42, "b": 2, "c": 3}
.
.fi
.
.IP "" 0
.
.SS "Subtraction: \-"
As well as normal arithmetic subtraction on numbers, the \fB\-\fR operator can be used on arrays to remove all occurrences of the second array\'s elements from the first array\.
.
.IP "" 4
.
.nf

jq \'4 \- \.a\'
   {"a":3}
=> 1

jq \'\. \- ["xml", "yaml"]\'
   ["xml", "yaml", "json"]
=> ["json"]
.
.fi
.
.IP "" 0
.
.SS "Multiplication, division, modulo: *, /, and %"
These infix operators behave as expected when given two numbers\. Division by zero raises an error\. \fBx % y\fR computes x modulo y\.
.
.P
Multiplying a string by a number produces the concatenation of that string that many times\. \fB"x" * 0\fR produces \fBnull\fR\.
.
.P
Dividing a string by another splits the first using the second as separators\.
.
.P
Multiplying two objects will merge them recursively: this works like addition but if both objects contain a value for the same key, and the values are objects, the two are merged with the same strategy\.
.
.IP "" 4
.
.nf

jq \'10 / \. * 3\'
   5
=> 6

jq \'\. / ", "\'
   "a, b,c,d, e"
=> ["a","b,c,d","e"]

jq \'{"k": {"a": 1, "b": 2}} * {"k": {"a": 0,"c": 3}}\'
   null
=> {"k": {"a": 0, "b": 2, "c": 3}}

jq \'\.[] | (1 / \.)?\'
   [1,0,\-1]
=> 1, \-1
.
.fi
.
.IP "" 0
.
.SS "length"
The builtin function \fBlength\fR gets the length of various different types of value:
.
.IP "\(bu" 4
The length of a \fBstring\fR is the number of Unicode codepoints it contains (which will be the same as its JSON\-encoded length in bytes if it\'s pure ASCII)\.
.
.IP "\(bu" 4
The length of an \fBarray\fR is the number of elements\.
.
.IP "\(bu" 4
The length of an \fBobject\fR is the number of key\-value pairs\.
.
.IP "\(bu" 4
The length of \fBnull\fR is zero\.
.
.IP
jq \'\.[] | length\' [[1,2], "string", {"a":2}, null] => 2, 6, 1, 0
.
.IP "" 0
.
.SS "utf8bytelength"
The builtin function \fButf8bytelength\fR outputs the number of bytes used to encode a string in UTF\-8\.
.
.IP "" 4
.
.nf

jq \'utf8bytelength\'
   "\eu03bc"
=> 2
.
.fi
.
.IP "" 0
.
.SS "keys, keys_unsorted"
The builtin function \fBkeys\fR, when given an object, returns its keys in an array\.
.
.P
The keys are sorted "alphabetically", by unicode codepoint order\. This is not an order that makes particular sense in any particular language, but you can count on it being the same for any two objects with the same set of keys, regardless of locale settings\.
.
.P
When \fBkeys\fR is given an array, it returns the valid indices for that array: the integers from 0 to length\-1\.
.
.P
The \fBkeys_unsorted\fR function is just like \fBkeys\fR, but if the input is an object then the keys will not be sorted, instead the keys will roughly be in insertion order\.
.
.IP "" 4
.
.nf

jq \'keys\'
   {"abc": 1, "abcd": 2, "Foo": 3}
=> ["Foo", "abc", "abcd"]

jq \'keys\'
   [42,3,35]
=> [0,1,2]
.
.fi
.
.IP "" 0
.
.SS "has(key)"
The builtin function \fBhas\fR returns whether the input object has the given key, or the input array has an element at the given index\.
.
.P
\fBhas($key)\fR has the same effect as checking whether \fB$key\fR is a member of the array returned by \fBkeys\fR, although \fBhas\fR will be faster\.
.
.IP "" 4
.
.nf

jq \'map(has("foo"))\'
   [{"foo": 42}, {}]
=> [true, false]

jq \'map(has(2))\'
   [[0,1], ["a","b","c"]]
=> [false, true]
.
.fi
.
.IP "" 0
.
.SS "in"
The builtin function \fBin\fR returns whether or not the input key is in the given object, or the input index corresponds to an element in the given array\. It is, essentially, an inversed version of \fBhas\fR\.
.
.IP "" 4
.
.nf

jq \'\.[] | in({"foo": 42})\'
   ["foo", "bar"]
=> true, false

jq \'map(in([0,1]))\'
   [2, 0]
=> [false, true]
.
.fi
.
.IP "" 0
.
.SS "map(x), map_values(x)"
For any filter \fBx\fR, \fBmap(x)\fR will run that filter for each element of the input array, and return the outputs in a new array\. \fBmap(\.+1)\fR will increment each element of an array of numbers\.
.
.P
Similarly, \fBmap_values(x)\fR will run that filter for each element, but it will return an object when an object is passed\.
.
.P
\fBmap(x)\fR is equivalent to \fB[\.[] | x]\fR\. In fact, this is how it\'s defined\. Similarly, \fBmap_values(x)\fR is defined as \fB\.[] |= x\fR\.
.
.IP "" 4
.
.nf

jq \'map(\.+1)\'
   [1,2,3]
=> [2,3,4]

jq \'map_values(\.+1)\'
   {"a": 1, "b": 2, "c": 3}
=> {"a": 2, "b": 3, "c": 4}
.
.fi
.
.IP "" 0
.
.SS "path(path_expression)"
Outputs array representations of the given path expression in \fB\.\fR\. The outputs are arrays of strings (object keys) and/or numbers (array indices)\.
.
.P
Path expressions are jq expressions like \fB\.a\fR, but also \fB\.[]\fR\. There are two types of path expressions: ones that can match exactly, and ones that cannot\. For example, \fB\.a\.b\.c\fR is an exact match path expression, while \fB\.a[]\.b\fR is not\.
.
.P
\fBpath(exact_path_expression)\fR will produce the array representation of the path expression even if it does not exist in \fB\.\fR, if \fB\.\fR is \fBnull\fR or an array or an object\.
.
.P
\fBpath(pattern)\fR will produce array representations of the paths matching \fBpattern\fR if the paths exist in \fB\.\fR\.
.
.P
Note that the path expressions are not different from normal expressions\. The expression \fBpath(\.\.|select(type=="boolean"))\fR outputs all the paths to boolean values in \fB\.\fR, and only those paths\.
.
.IP "" 4
.
.nf

jq \'path(\.a[0]\.b)\'
   null
=> ["a",0,"b"]

jq \'[path(\.\.)]\'
   {"a":[{"b":1}]}
=> [[],["a"],["a",0],["a",0,"b"]]
.
.fi
.
.IP "" 0
.
.SS "del(path_expression)"
The builtin function \fBdel\fR removes a key and its corresponding value from an object\.
.
.IP "" 4
.
.nf

jq \'del(\.foo)\'
   {"foo": 42, "bar": 9001, "baz": 42}
=> {"bar": 9001, "baz": 42}

jq \'del(\.[1, 2])\'
   ["foo", "bar", "baz"]
=> ["foo"]
.
.fi
.
.IP "" 0
.
.SS "getpath(PATHS)"
The builtin function \fBgetpath\fR outputs the values in \fB\.\fR found at each path in \fBPATHS\fR\.
.
.IP "" 4
.
.nf

jq \'getpath(["a","b"])\'
   null
=> null

jq \'[getpath(["a","b"], ["a","c"])]\'
   {"a":{"b":0, "c":1}}
=> [0, 1]
.
.fi
.
.IP "" 0
.
.SS "setpath(PATHS; VALUE)"
The builtin function \fBsetpath\fR sets the \fBPATHS\fR in \fB\.\fR to \fBVALUE\fR\.
.
.IP "" 4
.
.nf

jq \'setpath(["a","b"]; 1)\'
   null
=> {"a": {"b": 1}}

jq \'setpath(["a","b"]; 1)\'
   {"a":{"b":0}}
=> {"a": {"b": 1}}

jq \'setpath([0,"a"]; 1)\'
   null
=> [{"a":1}]
.
.fi
.
.IP "" 0
.
.SS "delpaths(PATHS)"
The builtin function \fBdelpaths\fR sets the \fBPATHS\fR in \fB\.\fR\. \fBPATHS\fR must be an array of paths, where each path is an array of strings and numbers\.
.
.IP "" 4
.
.nf

jq \'delpaths([["a","b"]])\'
   {"a":{"b":1},"x":{"y":2}}
=> {"a":{},"x":{"y":2}}
.
.fi
.
.IP "" 0
.
.SS "to_entries, from_entries, with_entries"
These functions convert between an object and an array of key\-value pairs\. If \fBto_entries\fR is passed an object, then for each \fBk: v\fR entry in the input, the output array includes \fB{"key": k, "value": v}\fR\.
.
.P
\fBfrom_entries\fR does the opposite conversion, and \fBwith_entries(foo)\fR is a shorthand for \fBto_entries | map(foo) | from_entries\fR, useful for doing some operation to all keys and values of an object\. \fBfrom_entries\fR accepts key, Key, name, Name, value and Value as keys\.
.
.IP "" 4
.
.nf

jq \'to_entries\'
   {"a": 1, "b": 2}
=> [{"key":"a", "value":1}, {"key":"b", "value":2}]

jq \'from_entries\'
   [{"key":"a", "value":1}, {"key":"b", "value":2}]
=> {"a": 1, "b": 2}

jq \'with_entries(\.key |= "KEY_" + \.)\'
   {"a": 1, "b": 2}
=> {"KEY_a": 1, "KEY_b": 2}
.
.fi
.
.IP "" 0
.
.SS "select(boolean_expression)"
The function \fBselect(foo)\fR produces its input unchanged if \fBfoo\fR returns true for that input, and produces no output otherwise\.
.
.P
It\'s useful for filtering lists: \fB[1,2,3] | map(select(\. >= 2))\fR will give you \fB[2,3]\fR\.
.
.IP "" 4
.
.nf

jq \'map(select(\. >= 2))\'
   [1,5,3,0,7]
=> [5,3,7]

jq \'\.[] | select(\.id == "second")\'
   [{"id": "first", "val": 1}, {"id": "second", "val": 2}]
=> {"id": "second", "val": 2}
.
.fi
.
.IP "" 0
.
.SS "arrays, objects, iterables, booleans, numbers, normals, finites, strings, nulls, values, scalars"
These built\-ins select only inputs that are arrays, objects, iterables (arrays or objects), booleans, numbers, normal numbers, finite numbers, strings, null, non\-null values, and non\-iterables, respectively\.
.
.IP "" 4
.
.nf

jq \'\.[]|numbers\'
   [[],{},1,"foo",null,true,false]
=> 1
.
.fi
.
.IP "" 0
.
.SS "empty"
\fBempty\fR returns no results\. None at all\. Not even \fBnull\fR\.
.
.P
It\'s useful on occasion\. You\'ll know if you need it :)
.
.IP "" 4
.
.nf

jq \'1, empty, 2\'
   null
=> 1, 2

jq \'[1,2,empty,3]\'
   null
=> [1,2,3]
.
.fi
.
.IP "" 0
.
.SS "error(message)"
Produces an error, just like \fB\.a\fR applied to values other than null and objects would, but with the given message as the error\'s value\. Errors can be caught with try/catch; see below\.
.
.SS "halt"
Stops the jq program with no further outputs\. jq will exit with exit status \fB0\fR\.
.
.SS "halt_error, halt_error(exit_code)"
Stops the jq program with no further outputs\. The input will be printed on \fBstderr\fR as raw output (i\.e\., strings will not have double quotes) with no decoration, not even a newline\.
.
.P
The given \fBexit_code\fR (defaulting to \fB5\fR) will be jq\'s exit status\.
.
.P
For example, \fB"Error: somthing went wrong\en"|halt_error(1)\fR\.
.
.SS "$__loc__"
Produces an object with a "file" key and a "line" key, with the filename and line number where \fB$__loc__\fR occurs, as values\.
.
.IP "" 4
.
.nf

jq \'try error("\e($__loc__)") catch \.\'
   null
=> "{\e"file\e":\e"<top\-level>\e",\e"line\e":1}"
.
.fi
.
.IP "" 0
.
.SS "paths, paths(node_filter), leaf_paths"
\fBpaths\fR outputs the paths to all the elements in its input (except it does not output the empty list, representing \. itself)\.
.
.P
\fBpaths(f)\fR outputs the paths to any values for which \fBf\fR is true\. That is, \fBpaths(numbers)\fR outputs the paths to all numeric values\.
.
.P
\fBleaf_paths\fR is an alias of \fBpaths(scalars)\fR; \fBleaf_paths\fR is \fIdeprecated\fR and will be removed in the next major release\.
.
.IP "" 4
.
.nf

jq \'[paths]\'
   [1,[[],{"a":2}]]
=> [[0],[1],[1,0],[1,1],[1,1,"a"]]

jq \'[paths(scalars)]\'
   [1,[[],{"a":2}]]
=> [[0],[1,1,"a"]]
.
.fi
.
.IP "" 0
.
.SS "add"
The filter \fBadd\fR takes as input an array, and produces as output the elements of the array added together\. This might mean summed, concatenated or merged depending on the types of the elements of the input array \- the rules are the same as those for the \fB+\fR operator (described above)\.
.
.P
If the input is an empty array, \fBadd\fR returns \fBnull\fR\.
.
.IP "" 4
.
.nf

jq \'add\'
   ["a","b","c"]
=> "abc"

jq \'add\'
   [1, 2, 3]
=> 6

jq \'add\'
   []
=> null
.
.fi
.
.IP "" 0
.
.SS "any, any(condition), any(generator; condition)"
The filter \fBany\fR takes as input an array of boolean values, and produces \fBtrue\fR as output if any of the elements of the array are \fBtrue\fR\.
.
.P
If the input is an empty array, \fBany\fR returns \fBfalse\fR\.
.
.P
The \fBany(condition)\fR form applies the given condition to the elements of the input array\.
.
.P
The \fBany(generator; condition)\fR form applies the given condition to all the outputs of the given generator\.
.
.IP "" 4
.
.nf

jq \'any\'
   [true, false]
=> true

jq \'any\'
   [false, false]
=> false

jq \'any\'
   []
=> false
.
.fi
.
.IP "" 0
.
.SS "all, all(condition), all(generator; condition)"
The filter \fBall\fR takes as input an array of boolean values, and produces \fBtrue\fR as output if all of the elements of the array are \fBtrue\fR\.
.
.P
The \fBall(condition)\fR form applies the given condition to the elements of the input array\.
.
.P
The \fBall(generator; condition)\fR form applies the given condition to all the outputs of the given generator\.
.
.P
If the input is an empty array, \fBall\fR returns \fBtrue\fR\.
.
.IP "" 4
.
.nf

jq \'all\'
   [true, false]
=> false

jq \'all\'
   [true, true]
=> true

jq \'all\'
   []
=> true
.
.fi
.
.IP "" 0
.
.SS "flatten, flatten(depth)"
The filter \fBflatten\fR takes as input an array of nested arrays, and produces a flat array in which all arrays inside the original array have been recursively replaced by their values\. You can pass an argument to it to specify how many levels of nesting to flatten\.
.
.P
\fBflatten(2)\fR is like \fBflatten\fR, but going only up to two levels deep\.
.
.IP "" 4
.
.nf

jq \'flatten\'
   [1, [2], [[3]]]
=> [1, 2, 3]

jq \'flatten(1)\'
   [1, [2], [[3]]]
=> [1, 2, [3]]

jq \'flatten\'
   [[]]
=> []

jq \'flatten\'
   [{"foo": "bar"}, [{"foo": "baz"}]]
=> [{"foo": "bar"}, {"foo": "baz"}]
.
.fi
.
.IP "" 0
.
.SS "range(upto), range(from;upto) range(from;upto;by)"
The \fBrange\fR function produces a range of numbers\. \fBrange(4;10)\fR produces 6 numbers, from 4 (inclusive) to 10 (exclusive)\. The numbers are produced as separate outputs\. Use \fB[range(4;10)]\fR to get a range as an array\.
.
.P
The one argument form generates numbers from 0 to the given number, with an increment of 1\.
.
.P
The two argument form generates numbers from \fBfrom\fR to \fBupto\fR with an increment of 1\.
.
.P
The three argument form generates numbers \fBfrom\fR to \fBupto\fR with an increment of \fBby\fR\.
.
.IP "" 4
.
.nf

jq \'range(2;4)\'
   null
=> 2, 3

jq \'[range(2;4)]\'
   null
=> [2,3]

jq \'[range(4)]\'
   null
=> [0,1,2,3]

jq \'[range(0;10;3)]\'
   null
=> [0,3,6,9]

jq \'[range(0;10;\-1)]\'
   null
=> []

jq \'[range(0;\-5;\-1)]\'
   null
=> [0,\-1,\-2,\-3,\-4]
.
.fi
.
.IP "" 0
.
.SS "floor"
The \fBfloor\fR function returns the floor of its numeric input\.
.
.IP "" 4
.
.nf

jq \'floor\'
   3\.14159
=> 3
.
.fi
.
.IP "" 0
.
.SS "sqrt"
The \fBsqrt\fR function returns the square root of its numeric input\.
.
.IP "" 4
.
.nf

jq \'sqrt\'
   9
=> 3
.
.fi
.
.IP "" 0
.
.SS "tonumber"
The \fBtonumber\fR function parses its input as a number\. It will convert correctly\-formatted strings to their numeric equivalent, leave numbers alone, and give an error on all other input\.
.
.IP "" 4
.
.nf

jq \'\.[] | tonumber\'
   [1, "1"]
=> 1, 1
.
.fi
.
.IP "" 0
.
.SS "tostring"
The \fBtostring\fR function prints its input as a string\. Strings are left unchanged, and all other values are JSON\-encoded\.
.
.IP "" 4
.
.nf

jq \'\.[] | tostring\'
   [1, "1", [1]]
=> "1", "1", "[1]"
.
.fi
.
.IP "" 0
.
.SS "type"
The \fBtype\fR function returns the type of its argument as a string, which is one of null, boolean, number, string, array or object\.
.
.IP "" 4
.
.nf

jq \'map(type)\'
   [0, false, [], {}, null, "hello"]
=> ["number", "boolean", "array", "object", "null", "string"]
.
.fi
.
.IP "" 0
.
.SS "infinite, nan, isinfinite, isnan, isfinite, isnormal"
Some arithmetic operations can yield infinities and "not a number" (NaN) values\. The \fBisinfinite\fR builtin returns \fBtrue\fR if its input is infinite\. The \fBisnan\fR builtin returns \fBtrue\fR if its input is a NaN\. The \fBinfinite\fR builtin returns a positive infinite value\. The \fBnan\fR builtin returns a NaN\. The \fBisnormal\fR builtin returns true if its input is a normal number\.
.
.P
Note that division by zero raises an error\.
.
.P
Currently most arithmetic operations operating on infinities, NaNs, and sub\-normals do not raise errors\.
.
.IP "" 4
.
.nf

jq \'\.[] | (infinite * \.) < 0\'
   [\-1, 1]
=> true, false

jq \'infinite, nan | type\'
   null
=> "number", "number"
.
.fi
.
.IP "" 0
.
.SS "sort, sort_by(path_expression)"
The \fBsort\fR functions sorts its input, which must be an array\. Values are sorted in the following order:
.
.IP "\(bu" 4
\fBnull\fR
.
.IP "\(bu" 4
\fBfalse\fR
.
.IP "\(bu" 4
\fBtrue\fR
.
.IP "\(bu" 4
numbers
.
.IP "\(bu" 4
strings, in alphabetical order (by unicode codepoint value)
.
.IP "\(bu" 4
arrays, in lexical order
.
.IP "\(bu" 4
objects
.
.IP "" 0
.
.P
The ordering for objects is a little complex: first they\'re compared by comparing their sets of keys (as arrays in sorted order), and if their keys are equal then the values are compared key by key\.
.
.P
\fBsort\fR may be used to sort by a particular field of an object, or by applying any jq filter\.
.
.P
\fBsort_by(foo)\fR compares two elements by comparing the result of \fBfoo\fR on each element\.
.
.IP "" 4
.
.nf

jq \'sort\'
   [8,3,null,6]
=> [null,3,6,8]

jq \'sort_by(\.foo)\'
   [{"foo":4, "bar":10}, {"foo":3, "bar":100}, {"foo":2, "bar":1}]
=> [{"foo":2, "bar":1}, {"foo":3, "bar":100}, {"foo":4, "bar":10}]
.
.fi
.
.IP "" 0
.
.SS "group_by(path_expression)"
\fBgroup_by(\.foo)\fR takes as input an array, groups the elements having the same \fB\.foo\fR field into separate arrays, and produces all of these arrays as elements of a larger array, sorted by the value of the \fB\.foo\fR field\.
.
.P
Any jq expression, not just a field access, may be used in place of \fB\.foo\fR\. The sorting order is the same as described in the \fBsort\fR function above\.
.
.IP "" 4
.
.nf

jq \'group_by(\.foo)\'
   [{"foo":1, "bar":10}, {"foo":3, "bar":100}, {"foo":1, "bar":1}]
=> [[{"foo":1, "bar":10}, {"foo":1, "bar":1}], [{"foo":3, "bar":100}]]
.
.fi
.
.IP "" 0
.
.SS "min, max, min_by(path_exp), max_by(path_exp)"
Find the minimum or maximum element of the input array\.
.
.P
The \fBmin_by(path_exp)\fR and \fBmax_by(path_exp)\fR functions allow you to specify a particular field or property to examine, e\.g\. \fBmin_by(\.foo)\fR finds the object with the smallest \fBfoo\fR field\.
.
.IP "" 4
.
.nf

jq \'min\'
   [5,4,2,7]
=> 2

jq \'max_by(\.foo)\'
   [{"foo":1, "bar":14}, {"foo":2, "bar":3}]
=> {"foo":2, "bar":3}
.
.fi
.
.IP "" 0
.
.SS "unique, unique_by(path_exp)"
The \fBunique\fR function takes as input an array and produces an array of the same elements, in sorted order, with duplicates removed\.
.
.P
The \fBunique_by(path_exp)\fR function will keep only one element for each value obtained by applying the argument\. Think of it as making an array by taking one element out of every group produced by \fBgroup\fR\.
.
.IP "" 4
.
.nf

jq \'unique\'
   [1,2,5,3,5,3,1,3]
=> [1,2,3,5]

jq \'unique_by(\.foo)\'
   [{"foo": 1, "bar": 2}, {"foo": 1, "bar": 3}, {"foo": 4, "bar": 5}]
=> [{"foo": 1, "bar": 2}, {"foo": 4, "bar": 5}]

jq \'unique_by(length)\'
   ["chunky", "bacon", "kitten", "cicada", "asparagus"]
=> ["bacon", "chunky", "asparagus"]
.
.fi
.
.IP "" 0
.
.SS "reverse"
This function reverses an array\.
.
.IP "" 4
.
.nf

jq \'reverse\'
   [1,2,3,4]
=> [4,3,2,1]
.
.fi
.
.IP "" 0
.
.SS "contains(element)"
The filter \fBcontains(b)\fR will produce true if b is completely contained within the input\. A string B is contained in a string A if B is a substring of A\. An array B is contained in an array A if all elements in B are contained in any element in A\. An object B is contained in object A if all of the values in B are contained in the value in A with the same key\. All other types are assumed to be contained in each other if they are equal\.
.
.IP "" 4
.
.nf

jq \'contains("bar")\'
   "foobar"
=> true

jq \'contains(["baz", "bar"])\'
   ["foobar", "foobaz", "blarp"]
=> true

jq \'contains(["bazzzzz", "bar"])\'
   ["foobar", "foobaz", "blarp"]
=> false

jq \'contains({foo: 12, bar: [{barp: 12}]})\'
   {"foo": 12, "bar":[1,2,{"barp":12, "blip":13}]}
=> true

jq \'contains({foo: 12, bar: [{barp: 15}]})\'
   {"foo": 12, "bar":[1,2,{"barp":12, "blip":13}]}
=> false
.
.fi
.
.IP "" 0
.
.SS "indices(s)"
Outputs an array containing the indices in \fB\.\fR where \fBs\fR occurs\. The input may be an array, in which case if \fBs\fR is an array then the indices output will be those where all elements in \fB\.\fR match those of \fBs\fR\.
.
.IP "" 4
.
.nf

jq \'indices(", ")\'
   "a,b, cd, efg, hijk"
=> [3,7,12]

jq \'indices(1)\'
   [0,1,2,1,3,1,4]
=> [1,3,5]

jq \'indices([1,2])\'
   [0,1,2,3,1,4,2,5,1,2,6,7]
=> [1,8]
.
.fi
.
.IP "" 0
.
.SS "index(s), rindex(s)"
Outputs the index of the first (\fBindex\fR) or last (\fBrindex\fR) occurrence of \fBs\fR in the input\.
.
.IP "" 4
.
.nf

jq \'index(", ")\'
   "a,b, cd, efg, hijk"
=> 3

jq \'rindex(", ")\'
   "a,b, cd, efg, hijk"
=> 12
.
.fi
.
.IP "" 0
.
.SS "inside"
The filter \fBinside(b)\fR will produce true if the input is completely contained within b\. It is, essentially, an inversed version of \fBcontains\fR\.
.
.IP "" 4
.
.nf

jq \'inside("foobar")\'
   "bar"
=> true

jq \'inside(["foobar", "foobaz", "blarp"])\'
   ["baz", "bar"]
=> true

jq \'inside(["foobar", "foobaz", "blarp"])\'
   ["bazzzzz", "bar"]
=> false

jq \'inside({"foo": 12, "bar":[1,2,{"barp":12, "blip":13}]})\'
   {"foo": 12, "bar": [{"barp": 12}]}
=> true

jq \'inside({"foo": 12, "bar":[1,2,{"barp":12, "blip":13}]})\'
   {"foo": 12, "bar": [{"barp": 15}]}
=> false
.
.fi
.
.IP "" 0
.
.SS "startswith(str)"
Outputs \fBtrue\fR if \. starts with the given string argument\.
.
.IP "" 4
.
.nf

jq \'[\.[]|startswith("foo")]\'
   ["fo", "foo", "barfoo", "foobar", "barfoob"]
=> [false, true, false, true, false]
.
.fi
.
.IP "" 0
.
.SS "endswith(str)"
Outputs \fBtrue\fR if \. ends with the given string argument\.
.
.IP "" 4
.
.nf

jq \'[\.[]|endswith("foo")]\'
   ["foobar", "barfoo"]
=> [false, true]
.
.fi
.
.IP "" 0
.
.SS "combinations, combinations(n)"
Outputs all combinations of the elements of the arrays in the input array\. If given an argument \fBn\fR, it outputs all combinations of \fBn\fR repetitions of the input array\.
.
.IP "" 4
.
.nf

jq \'combinations\'
   [[1,2], [3, 4]]
=> [1, 3], [1, 4], [2, 3], [2, 4]

jq \'combinations(2)\'
   [0, 1]
=> [0, 0], [0, 1], [1, 0], [1, 1]
.
.fi
.
.IP "" 0
.
.SS "ltrimstr(str)"
Outputs its input with the given prefix string removed, if it starts with it\.
.
.IP "" 4
.
.nf

jq \'[\.[]|ltrimstr("foo")]\'
   ["fo", "foo", "barfoo", "foobar", "afoo"]
=> ["fo","","barfoo","bar","afoo"]
.
.fi
.
.IP "" 0
.
.SS "rtrimstr(str)"
Outputs its input with the given suffix string removed, if it ends with it\.
.
.IP "" 4
.
.nf

jq \'[\.[]|rtrimstr("foo")]\'
   ["fo", "foo", "barfoo", "foobar", "foob"]
=> ["fo","","bar","foobar","foob"]
.
.fi
.
.IP "" 0
.
.SS "explode"
Converts an input string into an array of the string\'s codepoint numbers\.
.
.IP "" 4
.
.nf

jq \'explode\'
   "foobar"
=> [102,111,111,98,97,114]
.
.fi
.
.IP "" 0
.
.SS "implode"
The inverse of explode\.
.
.IP "" 4
.
.nf

jq \'implode\'
   [65, 66, 67]
=> "ABC"
.
.fi
.
.IP "" 0
.
.SS "split(str)"
Splits an input string on the separator argument\.
.
.IP "" 4
.
.nf

jq \'split(", ")\'
   "a, b,c,d, e, "
=> ["a","b,c,d","e",""]
.
.fi
.
.IP "" 0
.
.SS "join(str)"
Joins the array of elements given as input, using the argument as separator\. It is the inverse of \fBsplit\fR: that is, running \fBsplit("foo") | join("foo")\fR over any input string returns said input string\.
.
.P
Numbers and booleans in the input are converted to strings\. Null values are treated as empty strings\. Arrays and objects in the input are not supported\.
.
.IP "" 4
.
.nf

jq \'join(", ")\'
   ["a","b,c,d","e"]
=> "a, b,c,d, e"

jq \'join(" ")\'
   ["a",1,2\.3,true,null,false]
=> "a 1 2\.3 true  false"
.
.fi
.
.IP "" 0
.
.SS "ascii_downcase, ascii_upcase"
Emit a copy of the input string with its alphabetic characters (a\-z and A\-Z) converted to the specified case\.
.
.SS "while(cond; update)"
The \fBwhile(cond; update)\fR function allows you to repeatedly apply an update to \fB\.\fR until \fBcond\fR is false\.
.
.P
Note that \fBwhile(cond; update)\fR is internally defined as a recursive jq function\. Recursive calls within \fBwhile\fR will not consume additional memory if \fBupdate\fR produces at most one output for each input\. See advanced topics below\.
.
.IP "" 4
.
.nf

jq \'[while(\.<100; \.*2)]\'
   1
=> [1,2,4,8,16,32,64]
.
.fi
.
.IP "" 0
.
.SS "until(cond; next)"
The \fBuntil(cond; next)\fR function allows you to repeatedly apply the expression \fBnext\fR, initially to \fB\.\fR then to its own output, until \fBcond\fR is true\. For example, this can be used to implement a factorial function (see below)\.
.
.P
Note that \fBuntil(cond; next)\fR is internally defined as a recursive jq function\. Recursive calls within \fBuntil()\fR will not consume additional memory if \fBnext\fR produces at most one output for each input\. See advanced topics below\.
.
.IP "" 4
.
.nf

jq \'[\.,1]|until(\.[0] < 1; [\.[0] \- 1, \.[1] * \.[0]])|\.[1]\'
   4
=> 24
.
.fi
.
.IP "" 0
.
.SS "recurse(f), recurse, recurse(f; condition), recurse_down"
The \fBrecurse(f)\fR function allows you to search through a recursive structure, and extract interesting data from all levels\. Suppose your input represents a filesystem:
.
.IP "" 4
.
.nf

{"name": "/", "children": [
  {"name": "/bin", "children": [
    {"name": "/bin/ls", "children": []},
    {"name": "/bin/sh", "children": []}]},
  {"name": "/home", "children": [
    {"name": "/home/stephen", "children": [
      {"name": "/home/stephen/jq", "children": []}]}]}]}
.
.fi
.
.IP "" 0
.
.P
Now suppose you want to extract all of the filenames present\. You need to retrieve \fB\.name\fR, \fB\.children[]\.name\fR, \fB\.children[]\.children[]\.name\fR, and so on\. You can do this with:
.
.IP "" 4
.
.nf

recurse(\.children[]) | \.name
.
.fi
.
.IP "" 0
.
.P
When called without an argument, \fBrecurse\fR is equivalent to \fBrecurse(\.[]?)\fR\.
.
.P
\fBrecurse(f)\fR is identical to \fBrecurse(f; \. != null)\fR and can be used without concerns about recursion depth\.
.
.P
\fBrecurse(f; condition)\fR is a generator which begins by emitting \. and then emits in turn \.|f, \.|f|f, \.|f|f|f, \.\.\. so long as the computed value satisfies the condition\. For example, to generate all the integers, at least in principle, one could write \fBrecurse(\.+1; true)\fR\.
.
.P
For legacy reasons, \fBrecurse_down\fR exists as an alias to calling \fBrecurse\fR without arguments\. This alias is considered \fIdeprecated\fR and will be removed in the next major release\.
.
.P
The recursive calls in \fBrecurse\fR will not consume additional memory whenever \fBf\fR produces at most a single output for each input\.
.
.IP "" 4
.
.nf

jq \'recurse(\.foo[])\'
   {"foo":[{"foo": []}, {"foo":[{"foo":[]}]}]}
=> {"foo":[{"foo":[]},{"foo":[{"foo":[]}]}]}, {"foo":[]}, {"foo":[{"foo":[]}]}, {"foo":[]}

jq \'recurse\'
   {"a":0,"b":[1]}
=> {"a":0,"b":[1]}, 0, [1], 1

jq \'recurse(\. * \.; \. < 20)\'
   2
=> 2, 4, 16
.
.fi
.
.IP "" 0
.
.SS "walk(f)"
The \fBwalk(f)\fR function applies f recursively to every component of the input entity\. When an array is encountered, f is first applied to its elements and then to the array itself; when an object is encountered, f is first applied to all the values and then to the object\. In practice, f will usually test the type of its input, as illustrated in the following examples\. The first example highlights the usefulness of processing the elements of an array of arrays before processing the array itself\. The second example shows how all the keys of all the objects within the input can be considered for alteration\.
.
.IP "" 4
.
.nf

jq \'walk(if type == "array" then sort else \. end)\'
   [[4, 1, 7], [8, 5, 2], [3, 6, 9]]
=> [[1,4,7],[2,5,8],[3,6,9]]

jq \'walk( if type == "object" then with_entries( \.key |= sub( "^_+"; "") ) else \. end )\'
   [ { "_a": { "__b": 2 } } ]
=> [{"a":{"b":2}}]
.
.fi
.
.IP "" 0
.
.SS "$ENV, env"
\fB$ENV\fR is an object representing the environment variables as set when the jq program started\.
.
.P
\fBenv\fR outputs an object representing jq\'s current environment\.
.
.P
At the moment there is no builtin for setting environment variables\.
.
.IP "" 4
.
.nf

jq \'$ENV\.PAGER\'
   null
=> "less"

jq \'env\.PAGER\'
   null
=> "less"
.
.fi
.
.IP "" 0
.
.SS "transpose"
Transpose a possibly jagged matrix (an array of arrays)\. Rows are padded with nulls so the result is always rectangular\.
.
.IP "" 4
.
.nf

jq \'transpose\'
   [[1], [2,3]]
=> [[1,2],[null,3]]
.
.fi
.
.IP "" 0
.
.SS "bsearch(x)"
bsearch(x) conducts a binary search for x in the input array\. If the input is sorted and contains x, then bsearch(x) will return its index in the array; otherwise, if the array is sorted, it will return (\-1 \- ix) where ix is an insertion point such that the array would still be sorted after the insertion of x at ix\. If the array is not sorted, bsearch(x) will return an integer that is probably of no interest\.
.
.IP "" 4
.
.nf

jq \'bsearch(0)\'
   [0,1]
=> 0

jq \'bsearch(0)\'
   [1,2,3]
=> \-1

jq \'bsearch(4) as $ix | if $ix < 0 then \.[\-(1+$ix)] = 4 else \. end\'
   [1,2,3]
=> [1,2,3,4]
.
.fi
.
.IP "" 0
.
.SS "String interpolation \- \e(foo)"
Inside a string, you can put an expression inside parens after a backslash\. Whatever the expression returns will be interpolated into the string\.
.
.IP "" 4
.
.nf

jq \'"The input was \e(\.), which is one less than \e(\.+1)"\'
   42
=> "The input was 42, which is one less than 43"
.
.fi
.
.IP "" 0
.
.SS "Convert to/from JSON"
The \fBtojson\fR and \fBfromjson\fR builtins dump values as JSON texts or parse JSON texts into values, respectively\. The tojson builtin differs from tostring in that tostring returns strings unmodified, while tojson encodes strings as JSON strings\.
.
.IP "" 4
.
.nf

jq \'[\.[]|tostring]\'
   [1, "foo", ["foo"]]
=> ["1","foo","[\e"foo\e"]"]

jq \'[\.[]|tojson]\'
   [1, "foo", ["foo"]]
=> ["1","\e"foo\e"","[\e"foo\e"]"]

jq \'[\.[]|tojson|fromjson]\'
   [1, "foo", ["foo"]]
=> [1,"foo",["foo"]]
.
.fi
.
.IP "" 0
.
.SS "Format strings and escaping"
The \fB@foo\fR syntax is used to format and escape strings, which is useful for building URLs, documents in a language like HTML or XML, and so forth\. \fB@foo\fR can be used as a filter on its own, the possible escapings are:
.
.TP
\fB@text\fR:
.
.IP
Calls \fBtostring\fR, see that function for details\.
.
.TP
\fB@json\fR:
.
.IP
Serializes the input as JSON\.
.
.TP
\fB@html\fR:
.
.IP
Applies HTML/XML escaping, by mapping the characters \fB<>&\'"\fR to their entity equivalents \fB&lt;\fR, \fB&gt;\fR, \fB&amp;\fR, \fB&apos;\fR, \fB&quot;\fR\.
.
.TP
\fB@uri\fR:
.
.IP
Applies percent\-encoding, by mapping all reserved URI characters to a \fB%XX\fR sequence\.
.
.TP
\fB@csv\fR:
.
.IP
The input must be an array, and it is rendered as CSV with double quotes for strings, and quotes escaped by repetition\.
.
.TP
\fB@tsv\fR:
.
.IP
The input must be an array, and it is rendered as TSV (tab\-separated values)\. Each input array will be printed as a single line\. Fields are separated by a single tab (ascii \fB0x09\fR)\. Input characters line\-feed (ascii \fB0x0a\fR), carriage\-return (ascii \fB0x0d\fR), tab (ascii \fB0x09\fR) and backslash (ascii \fB0x5c\fR) will be output as escape sequences \fB\en\fR, \fB\er\fR, \fB\et\fR, \fB\e\e\fR respectively\.
.
.TP
\fB@sh\fR:
.
.IP
The input is escaped suitable for use in a command\-line for a POSIX shell\. If the input is an array, the output will be a series of space\-separated strings\.
.
.TP
\fB@base64\fR:
.
.IP
The input is converted to base64 as specified by RFC 4648\.
.
.TP
\fB@base64d\fR:
.
.IP
The inverse of \fB@base64\fR, input is decoded as specified by RFC 4648\. Note: If the decoded string is not UTF\-8, the results are undefined\.
.
.P
This syntax can be combined with string interpolation in a useful way\. You can follow a \fB@foo\fR token with a string literal\. The contents of the string literal will \fInot\fR be escaped\. However, all interpolations made inside that string literal will be escaped\. For instance,
.
.IP "" 4
.
.nf

@uri "https://www\.google\.com/search?q=\e(\.search)"
.
.fi
.
.IP "" 0
.
.P
will produce the following output for the input \fB{"search":"what is jq?"}\fR:
.
.IP "" 4
.
.nf

"https://www\.google\.com/search?q=what%20is%20jq%3F"
.
.fi
.
.IP "" 0
.
.P
Note that the slashes, question mark, etc\. in the URL are not escaped, as they were part of the string literal\.
.
.IP "" 4
.
.nf

jq \'@html\'
   "This works if x < y"
=> "This works if x &lt; y"

jq \'@sh "echo \e(\.)"\'
   "O\'Hara\'s Ale"
=> "echo \'O\'\e\e\'\'Hara\'\e\e\'\'s Ale\'"

jq \'@base64\'
   "This is a message"
=> "VGhpcyBpcyBhIG1lc3NhZ2U="

jq \'@base64d\'
   "VGhpcyBpcyBhIG1lc3NhZ2U="
=> "This is a message"
.
.fi
.
.IP "" 0
.
.SS "Dates"
jq provides some basic date handling functionality, with some high\-level and low\-level builtins\. In all cases these builtins deal exclusively with time in UTC\.
.
.P
The \fBfromdateiso8601\fR builtin parses datetimes in the ISO 8601 format to a number of seconds since the Unix epoch (1970\-01\-01T00:00:00Z)\. The \fBtodateiso8601\fR builtin does the inverse\.
.
.P
The \fBfromdate\fR builtin parses datetime strings\. Currently \fBfromdate\fR only supports ISO 8601 datetime strings, but in the future it will attempt to parse datetime strings in more formats\.
.
.P
The \fBtodate\fR builtin is an alias for \fBtodateiso8601\fR\.
.
.P
The \fBnow\fR builtin outputs the current time, in seconds since the Unix epoch\.
.
.P
Low\-level jq interfaces to the C\-library time functions are also provided: \fBstrptime\fR, \fBstrftime\fR, \fBstrflocaltime\fR, \fBmktime\fR, \fBgmtime\fR, and \fBlocaltime\fR\. Refer to your host operating system\'s documentation for the format strings used by \fBstrptime\fR and \fBstrftime\fR\. Note: these are not necessarily stable interfaces in jq, particularly as to their localization functionality\.
.
.P
The \fBgmtime\fR builtin consumes a number of seconds since the Unix epoch and outputs a "broken down time" representation of Greenwhich Meridian time as an array of numbers representing (in this order): the year, the month (zero\-based), the day of the month (one\-based), the hour of the day, the minute of the hour, the second of the minute, the day of the week, and the day of the year \-\- all one\-based unless otherwise stated\. The day of the week number may be wrong on some systems for dates before March 1st 1900, or after December 31 2099\.
.
.P
The \fBlocaltime\fR builtin works like the \fBgmtime\fR builtin, but using the local timezone setting\.
.
.P
The \fBmktime\fR builtin consumes "broken down time" representations of time output by \fBgmtime\fR and \fBstrptime\fR\.
.
.P
The \fBstrptime(fmt)\fR builtin parses input strings matching the \fBfmt\fR argument\. The output is in the "broken down time" representation consumed by \fBgmtime\fR and output by \fBmktime\fR\.
.
.P
The \fBstrftime(fmt)\fR builtin formats a time (GMT) with the given format\. The \fBstrflocaltime\fR does the same, but using the local timezone setting\.
.
.P
The format strings for \fBstrptime\fR and \fBstrftime\fR are described in typical C library documentation\. The format string for ISO 8601 datetime is \fB"%Y\-%m\-%dT%H:%M:%SZ"\fR\.
.
.P
jq may not support some or all of this date functionality on some systems\. In particular, the \fB%u\fR and \fB%j\fR specifiers for \fBstrptime(fmt)\fR are not supported on macOS\.
.
.IP "" 4
.
.nf

jq \'fromdate\'
   "2015\-03\-05T23:51:47Z"
=> 1425599507

jq \'strptime("%Y\-%m\-%dT%H:%M:%SZ")\'
   "2015\-03\-05T23:51:47Z"
=> [2015,2,5,23,51,47,4,63]

jq \'strptime("%Y\-%m\-%dT%H:%M:%SZ")|mktime\'
   "2015\-03\-05T23:51:47Z"
=> 1425599507
.
.fi
.
.IP "" 0
.
.SS "SQL\-Style Operators"
jq provides a few SQL\-style operators\.
.
.TP
INDEX(stream; index_expression):
.
.IP
This builtin produces an object whose keys are computed by the given index expression applied to each value from the given stream\.
.
.TP
JOIN($idx; stream; idx_expr; join_expr):
.
.IP
This builtin joins the values from the given stream to the given index\. The index\'s keys are computed by applying the given index expression to each value from the given stream\. An array of the value in the stream and the corresponding value from the index is fed to the given join expression to produce each result\.
.
.TP
JOIN($idx; stream; idx_expr):
.
.IP
Same as \fBJOIN($idx; stream; idx_expr; \.)\fR\.
.
.TP
JOIN($idx; idx_expr):
.
.IP
This builtin joins the input \fB\.\fR to the given index, applying the given index expression to \fB\.\fR to compute the index key\. The join operation is as described above\.
.
.TP
IN(s):
.
.IP
This builtin outputs \fBtrue\fR if \fB\.\fR appears in the given stream, otherwise it outputs \fBfalse\fR\.
.
.TP
IN(source; s):
.
.IP
This builtin outputs \fBtrue\fR if any value in the source stream appears in the second stream, otherwise it outputs \fBfalse\fR\.
.
.SS "builtins"
Returns a list of all builtin functions in the format \fBname/arity\fR\. Since functions with the same name but different arities are considered separate functions, \fBall/0\fR, \fBall/1\fR, and \fBall/2\fR would all be present in the list\.
.
.SH "CONDITIONALS AND COMPARISONS"
.
.SS "==, !="
The expression \'a == b\' will produce \'true\' if the result of a and b are equal (that is, if they represent equivalent JSON documents) and \'false\' otherwise\. In particular, strings are never considered equal to numbers\. If you\'re coming from Javascript, jq\'s == is like Javascript\'s === \- considering values equal only when they have the same type as well as the same value\.
.
.P
!= is "not equal", and \'a != b\' returns the opposite value of \'a == b\'
.
.IP "" 4
.
.nf

jq \'\.[] == 1\'
   [1, 1\.0, "1", "banana"]
=> true, true, false, false
.
.fi
.
.IP "" 0
.
.SS "if\-then\-else"
\fBif A then B else C end\fR will act the same as \fBB\fR if \fBA\fR produces a value other than false or null, but act the same as \fBC\fR otherwise\.
.
.P
Checking for false or null is a simpler notion of "truthiness" than is found in Javascript or Python, but it means that you\'ll sometimes have to be more explicit about the condition you want: you can\'t test whether, e\.g\. a string is empty using \fBif \.name then A else B end\fR, you\'ll need something more like \fBif (\.name | length) > 0 then A else B end\fR instead\.
.
.P
If the condition \fBA\fR produces multiple results, then \fBB\fR is evaluated once for each result that is not false or null, and \fBC\fR is evaluated once for each false or null\.
.
.P
More cases can be added to an if using \fBelif A then B\fR syntax\.
.
.IP "" 4
.
.nf

jq \'if \. == 0 then
.
.fi
.
.IP "" 0
.
.P
"zero" elif \. == 1 then "one" else "many" end\' 2 => "many"
.
.SS ">, >=, <=, <"
The comparison operators \fB>\fR, \fB>=\fR, \fB<=\fR, \fB<\fR return whether their left argument is greater than, greater than or equal to, less than or equal to or less than their right argument (respectively)\.
.
.P
The ordering is the same as that described for \fBsort\fR, above\.
.
.IP "" 4
.
.nf

jq \'\. < 5\'
   2
=> true
.
.fi
.
.IP "" 0
.
.SS "and/or/not"
jq supports the normal Boolean operators and/or/not\. They have the same standard of truth as if expressions \- false and null are considered "false values", and anything else is a "true value"\.
.
.P
If an operand of one of these operators produces multiple results, the operator itself will produce a result for each input\.
.
.P
\fBnot\fR is in fact a builtin function rather than an operator, so it is called as a filter to which things can be piped rather than with special syntax, as in \fB\.foo and \.bar | not\fR\.
.
.P
These three only produce the values "true" and "false", and so are only useful for genuine Boolean operations, rather than the common Perl/Python/Ruby idiom of "value_that_may_be_null or default"\. If you want to use this form of "or", picking between two values rather than evaluating a condition, see the "//" operator below\.
.
.IP "" 4
.
.nf

jq \'42 and "a string"\'
   null
=> true

jq \'(true, false) or false\'
   null
=> true, false

jq \'(true, true) and (true, false)\'
   null
=> true, false, true, false

jq \'[true, false | not]\'
   null
=> [false, true]
.
.fi
.
.IP "" 0
.
.SS "Alternative operator: //"
A filter of the form \fBa // b\fR produces the same results as \fBa\fR, if \fBa\fR produces results other than \fBfalse\fR and \fBnull\fR\. Otherwise, \fBa // b\fR produces the same results as \fBb\fR\.
.
.P
This is useful for providing defaults: \fB\.foo // 1\fR will evaluate to \fB1\fR if there\'s no \fB\.foo\fR element in the input\. It\'s similar to how \fBor\fR is sometimes used in Python (jq\'s \fBor\fR operator is reserved for strictly Boolean operations)\.
.
.IP "" 4
.
.nf

jq \'\.foo // 42\'
   {"foo": 19}
=> 19

jq \'\.foo // 42\'
   {}
=> 42
.
.fi
.
.IP "" 0
.
.SS "try\-catch"
Errors can be caught by using \fBtry EXP catch EXP\fR\. The first expression is executed, and if it fails then the second is executed with the error message\. The output of the handler, if any, is output as if it had been the output of the expression to try\.
.
.P
The \fBtry EXP\fR form uses \fBempty\fR as the exception handler\.
.
.IP "" 4
.
.nf

jq \'try \.a catch "\. is not an object"\'
   true
=> "\. is not an object"

jq \'[\.[]|try \.a]\'
   [{}, true, {"a":1}]
=> [null, 1]

jq \'try error("some exception") catch \.\'
   true
=> "some exception"
.
.fi
.
.IP "" 0
.
.SS "Breaking out of control structures"
A convenient use of try/catch is to break out of control structures like \fBreduce\fR, \fBforeach\fR, \fBwhile\fR, and so on\.
.
.P
For example:
.
.IP "" 4
.
.nf

# Repeat an expression until it raises "break" as an
# error, then stop repeating without re\-raising the error\.
# But if the error caught is not "break" then re\-raise it\.
try repeat(exp) catch \.=="break" then empty else error;
.
.fi
.
.IP "" 0
.
.P
jq has a syntax for named lexical labels to "break" or "go (back) to":
.
.IP "" 4
.
.nf

label $out | \.\.\. break $out \.\.\.
.
.fi
.
.IP "" 0
.
.P
The \fBbreak $label_name\fR expression will cause the program to to act as though the nearest (to the left) \fBlabel $label_name\fR produced \fBempty\fR\.
.
.P
The relationship between the \fBbreak\fR and corresponding \fBlabel\fR is lexical: the label has to be "visible" from the break\.
.
.P
To break out of a \fBreduce\fR, for example:
.
.IP "" 4
.
.nf

label $out | reduce \.[] as $item (null; if \.==false then break $out else \.\.\. end)
.
.fi
.
.IP "" 0
.
.P
The following jq program produces a syntax error:
.
.IP "" 4
.
.nf

break $out
.
.fi
.
.IP "" 0
.
.P
because no label \fB$out\fR is visible\.
.
.SS "Error Suppression / Optional Operator: ?"
The \fB?\fR operator, used as \fBEXP?\fR, is shorthand for \fBtry EXP\fR\.
.
.IP "" 4
.
.nf

jq \'[\.[]|(\.a)?]\'
   [{}, true, {"a":1}]
=> [null, 1]
.
.fi
.
.IP "" 0
.
.SH "REGULAR EXPRESSIONS (PCRE)"
jq uses the Oniguruma regular expression library, as do php, ruby, TextMate, Sublime Text, etc, so the description here will focus on jq specifics\.
.
.P
The jq regex filters are defined so that they can be used using one of these patterns:
.
.IP "" 4
.
.nf

STRING | FILTER( REGEX )
STRING | FILTER( REGEX; FLAGS )
STRING | FILTER( [REGEX] )
STRING | FILTER( [REGEX, FLAGS] )
.
.fi
.
.IP "" 0
.
.P
where: * STRING, REGEX and FLAGS are jq strings and subject to jq string interpolation; * REGEX, after string interpolation, should be a valid PCRE regex; * FILTER is one of \fBtest\fR, \fBmatch\fR, or \fBcapture\fR, as described below\.
.
.P
FLAGS is a string consisting of one of more of the supported flags:
.
.IP "\(bu" 4
\fBg\fR \- Global search (find all matches, not just the first)
.
.IP "\(bu" 4
\fBi\fR \- Case insensitive search
.
.IP "\(bu" 4
\fBm\fR \- Multi line mode (\'\.\' will match newlines)
.
.IP "\(bu" 4
\fBn\fR \- Ignore empty matches
.
.IP "\(bu" 4
\fBp\fR \- Both s and m modes are enabled
.
.IP "\(bu" 4
\fBs\fR \- Single line mode (\'^\' \-> \'\eA\', \'$\' \-> \'\eZ\')
.
.IP "\(bu" 4
\fBl\fR \- Find longest possible matches
.
.IP "\(bu" 4
\fBx\fR \- Extended regex format (ignore whitespace and comments)
.
.IP "" 0
.
.P
To match whitespace in an x pattern use an escape such as \es, e\.g\.
.
.IP "\(bu" 4
test( "a\esb", "x" )\.
.
.IP "" 0
.
.P
Note that certain flags may also be specified within REGEX, e\.g\.
.
.IP "\(bu" 4
jq \-n \'("test", "TEst", "teST", "TEST") | test( "(?i)te(?\-i)st" )\'
.
.IP "" 0
.
.P
evaluates to: true, true, false, false\.
.
.SS "test(val), test(regex; flags)"
Like \fBmatch\fR, but does not return match objects, only \fBtrue\fR or \fBfalse\fR for whether or not the regex matches the input\.
.
.IP "" 4
.
.nf

jq \'test("foo")\'
   "foo"
=> true

jq \'\.[] | test("a b c # spaces are ignored"; "ix")\'
   ["xabcd", "ABC"]
=> true, true
.
.fi
.
.IP "" 0
.
.SS "match(val), match(regex; flags)"
\fBmatch\fR outputs an object for each match it finds\. Matches have the following fields:
.
.IP "\(bu" 4
\fBoffset\fR \- offset in UTF\-8 codepoints from the beginning of the input
.
.IP "\(bu" 4
\fBlength\fR \- length in UTF\-8 codepoints of the match
.
.IP "\(bu" 4
\fBstring\fR \- the string that it matched
.
.IP "\(bu" 4
\fBcaptures\fR \- an array of objects representing capturing groups\.
.
.IP "" 0
.
.P
Capturing group objects have the following fields:
.
.IP "\(bu" 4
\fBoffset\fR \- offset in UTF\-8 codepoints from the beginning of the input
.
.IP "\(bu" 4
\fBlength\fR \- length in UTF\-8 codepoints of this capturing group
.
.IP "\(bu" 4
\fBstring\fR \- the string that was captured
.
.IP "\(bu" 4
\fBname\fR \- the name of the capturing group (or \fBnull\fR if it was unnamed)
.
.IP "" 0
.
.P
Capturing groups that did not match anything return an offset of \-1
.
.IP "" 4
.
.nf

jq \'match("(abc)+"; "g")\'
   "abc abc"
=> {"offset": 0, "length": 3, "string": "abc", "captures": [{"offset": 0, "length": 3, "string": "abc", "name": null}]}, {"offset": 4, "length": 3, "string": "abc", "captures": [{"offset": 4, "length": 3, "string": "abc", "name": null}]}

jq \'match("foo")\'
   "foo bar foo"
=> {"offset": 0, "length": 3, "string": "foo", "captures": []}

jq \'match(["foo", "ig"])\'
   "foo bar FOO"
=> {"offset": 0, "length": 3, "string": "foo", "captures": []}, {"offset": 8, "length": 3, "string": "FOO", "captures": []}

jq \'match("foo (?<bar123>bar)? foo"; "ig")\'
   "foo bar foo foo  foo"
=> {"offset": 0, "length": 11, "string": "foo bar foo", "captures": [{"offset": 4, "length": 3, "string": "bar", "name": "bar123"}]}, {"offset": 12, "length": 8, "string": "foo  foo", "captures": [{"offset": \-1, "length": 0, "string": null, "name": "bar123"}]}

jq \'[ match("\."; "g")] | length\'
   "abc"
=> 3
.
.fi
.
.IP "" 0
.
.SS "capture(val), capture(regex; flags)"
Collects the named captures in a JSON object, with the name of each capture as the key, and the matched string as the corresponding value\.
.
.IP "" 4
.
.nf

jq \'capture("(?<a>[a\-z]+)\-(?<n>[0\-9]+)")\'
   "xyzzy\-14"
=> { "a": "xyzzy", "n": "14" }
.
.fi
.
.IP "" 0
.
.SS "scan(regex), scan(regex; flags)"
Emit a stream of the non\-overlapping substrings of the input that match the regex in accordance with the flags, if any have been specified\. If there is no match, the stream is empty\. To capture all the matches for each input string, use the idiom \fB[ expr ]\fR, e\.g\. \fB[ scan(regex) ]\fR\.
.
.SS "split(regex; flags)"
For backwards compatibility, \fBsplit\fR splits on a string, not a regex\.
.
.SS "splits(regex), splits(regex; flags)"
These provide the same results as their \fBsplit\fR counterparts, but as a stream instead of an array\.
.
.SS "sub(regex; tostring) sub(regex; string; flags)"
Emit the string obtained by replacing the first match of regex in the input string with \fBtostring\fR, after interpolation\. \fBtostring\fR should be a jq string, and may contain references to named captures\. The named captures are, in effect, presented as a JSON object (as constructed by \fBcapture\fR) to \fBtostring\fR, so a reference to a captured variable named "x" would take the form: "(\.x)"\.
.
.SS "gsub(regex; string), gsub(regex; string; flags)"
\fBgsub\fR is like \fBsub\fR but all the non\-overlapping occurrences of the regex are replaced by the string, after interpolation\.
.
.SH "ADVANCED FEATURES"
Variables are an absolute necessity in most programming languages, but they\'re relegated to an "advanced feature" in jq\.
.
.P
In most languages, variables are the only means of passing around data\. If you calculate a value, and you want to use it more than once, you\'ll need to store it in a variable\. To pass a value to another part of the program, you\'ll need that part of the program to define a variable (as a function parameter, object member, or whatever) in which to place the data\.
.
.P
It is also possible to define functions in jq, although this is is a feature whose biggest use is defining jq\'s standard library (many jq functions such as \fBmap\fR and \fBfind\fR are in fact written in jq)\.
.
.P
jq has reduction operators, which are very powerful but a bit tricky\. Again, these are mostly used internally, to define some useful bits of jq\'s standard library\.
.
.P
It may not be obvious at first, but jq is all about generators (yes, as often found in other languages)\. Some utilities are provided to help deal with generators\.
.
.P
Some minimal I/O support (besides reading JSON from standard input, and writing JSON to standard output) is available\.
.
.P
Finally, there is a module/library system\.
.
.SS "Variable / Symbolic Binding Operator: \.\.\. as $identifier | \.\.\."
In jq, all filters have an input and an output, so manual plumbing is not necessary to pass a value from one part of a program to the next\. Many expressions, for instance \fBa + b\fR, pass their input to two distinct subexpressions (here \fBa\fR and \fBb\fR are both passed the same input), so variables aren\'t usually necessary in order to use a value twice\.
.
.P
For instance, calculating the average value of an array of numbers requires a few variables in most languages \- at least one to hold the array, perhaps one for each element or for a loop counter\. In jq, it\'s simply \fBadd / length\fR \- the \fBadd\fR expression is given the array and produces its sum, and the \fBlength\fR expression is given the array and produces its length\.
.
.P
So, there\'s generally a cleaner way to solve most problems in jq than defining variables\. Still, sometimes they do make things easier, so jq lets you define variables using \fBexpression as $variable\fR\. All variable names start with \fB$\fR\. Here\'s a slightly uglier version of the array\-averaging example:
.
.IP "" 4
.
.nf

length as $array_length | add / $array_length
.
.fi
.
.IP "" 0
.
.P
We\'ll need a more complicated problem to find a situation where using variables actually makes our lives easier\.
.
.P
Suppose we have an array of blog posts, with "author" and "title" fields, and another object which is used to map author usernames to real names\. Our input looks like:
.
.IP "" 4
.
.nf

{"posts": [{"title": "Frist psot", "author": "anon"},
           {"title": "A well\-written article", "author": "person1"}],
 "realnames": {"anon": "Anonymous Coward",
               "person1": "Person McPherson"}}
.
.fi
.
.IP "" 0
.
.P
We want to produce the posts with the author field containing a real name, as in:
.
.IP "" 4
.
.nf

{"title": "Frist psot", "author": "Anonymous Coward"}
{"title": "A well\-written article", "author": "Person McPherson"}
.
.fi
.
.IP "" 0
.
.P
We use a variable, $names, to store the realnames object, so that we can refer to it later when looking up author usernames:
.
.IP "" 4
.
.nf

\&\.realnames as $names | \.posts[] | {title, author: $names[\.author]}
.
.fi
.
.IP "" 0
.
.P
The expression \fBexp as $x | \.\.\.\fR means: for each value of expression \fBexp\fR, run the rest of the pipeline with the entire original input, and with \fB$x\fR set to that value\. Thus \fBas\fR functions as something of a foreach loop\.
.
.P
Just as \fB{foo}\fR is a handy way of writing \fB{foo: \.foo}\fR, so \fB{$foo}\fR is a handy way of writing \fB{foo:$foo}\fR\.
.
.P
Multiple variables may be declared using a single \fBas\fR expression by providing a pattern that matches the structure of the input (this is known as "destructuring"):
.
.IP "" 4
.
.nf

\&\. as {realnames: $names, posts: [$first, $second]} | \.\.\.
.
.fi
.
.IP "" 0
.
.P
The variable declarations in array patterns (e\.g\., \fB\. as [$first, $second]\fR) bind to the elements of the array in from the element at index zero on up, in order\. When there is no value at the index for an array pattern element, \fBnull\fR is bound to that variable\.
.
.P
Variables are scoped over the rest of the expression that defines them, so
.
.IP "" 4
.
.nf

\&\.realnames as $names | (\.posts[] | {title, author: $names[\.author]})
.
.fi
.
.IP "" 0
.
.P
will work, but
.
.IP "" 4
.
.nf

(\.realnames as $names | \.posts[]) | {title, author: $names[\.author]}
.
.fi
.
.IP "" 0
.
.P
won\'t\.
.
.P
For programming language theorists, it\'s more accurate to say that jq variables are lexically\-scoped bindings\. In particular there\'s no way to change the value of a binding; one can only setup a new binding with the same name, but which will not be visible where the old one was\.
.
.IP "" 4
.
.nf

jq \'\.bar as $x | \.foo | \. + $x\'
   {"foo":10, "bar":200}
=> 210

jq \'\. as $i|[(\.*2|\. as $i| $i), $i]\'
   5
=> [10,5]

jq \'\. as [$a, $b, {c: $c}] | $a + $b + $c\'
   [2, 3, {"c": 4, "d": 5}]
=> 9

jq \'\.[] as [$a, $b] | {a: $a, b: $b}\'
   [[0], [0, 1], [2, 1, 0]]
=> {"a":0,"b":null}, {"a":0,"b":1}, {"a":2,"b":1}
.
.fi
.
.IP "" 0
.
.SS "Defining Functions"
You can give a filter a name using "def" syntax:
.
.IP "" 4
.
.nf

def increment: \. + 1;
.
.fi
.
.IP "" 0
.
.P
From then on, \fBincrement\fR is usable as a filter just like a builtin function (in fact, this is how many of the builtins are defined)\. A function may take arguments:
.
.IP "" 4
.
.nf

def map(f): [\.[] | f];
.
.fi
.
.IP "" 0
.
.P
Arguments are passed as \fIfilters\fR (functions with no arguments), \fInot\fR as values\. The same argument may be referenced multiple times with different inputs (here \fBf\fR is run for each element of the input array)\. Arguments to a function work more like callbacks than like value arguments\. This is important to understand\. Consider:
.
.IP "" 4
.
.nf

def foo(f): f|f;
5|foo(\.*2)
.
.fi
.
.IP "" 0
.
.P
The result will be 20 because \fBf\fR is \fB\.*2\fR, and during the first invocation of \fBf\fR \fB\.\fR will be 5, and the second time it will be 10 (5 * 2), so the result will be 20\. Function arguments are filters, and filters expect an input when invoked\.
.
.P
If you want the value\-argument behaviour for defining simple functions, you can just use a variable:
.
.IP "" 4
.
.nf

def addvalue(f): f as $f | map(\. + $f);
.
.fi
.
.IP "" 0
.
.P
Or use the short\-hand:
.
.IP "" 4
.
.nf

def addvalue($f): \.\.\.;
.
.fi
.
.IP "" 0
.
.P
With either definition, \fBaddvalue(\.foo)\fR will add the current input\'s \fB\.foo\fR field to each element of the array\. Do note that calling \fBaddvalue(\.[])\fR will cause the \fBmap(\. + $f)\fR part to be evaluated once per value in the value of \fB\.\fR at the call site\.
.
.P
Multiple definitions using the same function name are allowed\. Each re\-definition replaces the previous one for the same number of function arguments, but only for references from functions (or main program) subsequent to the re\-definition\. See also the section below on scoping\.
.
.IP "" 4
.
.nf

jq \'def addvalue(f): \. + [f]; map(addvalue(\.[0]))\'
   [[1,2],[10,20]]
=> [[1,2,1], [10,20,10]]

jq \'def addvalue(f): f as $x | map(\. + $x); addvalue(\.[0])\'
   [[1,2],[10,20]]
=> [[1,2,1,2], [10,20,1,2]]
.
.fi
.
.IP "" 0
.
.SS "Scoping"
There are two types of symbols in jq: value bindings (a\.k\.a\., "variables"), and functions\. Both are scoped lexically, with expressions being able to refer only to symbols that have been defined "to the left" of them\. The only exception to this rule is that functions can refer to themselves so as to be able to create recursive functions\.
.
.P
For example, in the following expression there is a binding which is visible "to the right" of it, \fB\.\.\. | \.*3 as $times_three | [\. + $times_three] | \.\.\.\fR, but not "to the left"\. Consider this expression now, \fB\.\.\. | (\.*3 as $times_three | [\.+ $times_three]) | \.\.\.\fR: here the binding \fB$times_three\fR is \fInot\fR visible past the closing parenthesis\.
.
.SS "Reduce"
The \fBreduce\fR syntax in jq allows you to combine all of the results of an expression by accumulating them into a single answer\. As an example, we\'ll pass \fB[3,2,1]\fR to this expression:
.
.IP "" 4
.
.nf

reduce \.[] as $item (0; \. + $item)
.
.fi
.
.IP "" 0
.
.P
For each result that \fB\.[]\fR produces, \fB\. + $item\fR is run to accumulate a running total, starting from 0\. In this example, \fB\.[]\fR produces the results 3, 2, and 1, so the effect is similar to running something like this:
.
.IP "" 4
.
.nf

0 | (3 as $item | \. + $item) |
    (2 as $item | \. + $item) |
    (1 as $item | \. + $item)

jq \'reduce \.[] as $item (0; \. + $item)\'
   [10,2,5,3]
=> 20
.
.fi
.
.IP "" 0
.
.SS "isempty(exp)"
Returns true if \fBexp\fR produces no outputs, false otherwise\.
.
.IP "" 4
.
.nf

jq \'isempty(empty)\'
   null
=> true
.
.fi
.
.IP "" 0
.
.SS "limit(n; exp)"
The \fBlimit\fR function extracts up to \fBn\fR outputs from \fBexp\fR\.
.
.IP "" 4
.
.nf

jq \'[limit(3;\.[])]\'
   [0,1,2,3,4,5,6,7,8,9]
=> [0,1,2]
.
.fi
.
.IP "" 0
.
.SS "first(expr), last(expr), nth(n; expr)"
The \fBfirst(expr)\fR and \fBlast(expr)\fR functions extract the first and last values from \fBexpr\fR, respectively\.
.
.P
The \fBnth(n; expr)\fR function extracts the nth value output by \fBexpr\fR\. This can be defined as \fBdef nth(n; expr): last(limit(n + 1; expr));\fR\. Note that \fBnth(n; expr)\fR doesn\'t support negative values of \fBn\fR\.
.
.IP "" 4
.
.nf

jq \'[first(range(\.)), last(range(\.)), nth(\./2; range(\.))]\'
   10
=> [0,9,5]
.
.fi
.
.IP "" 0
.
.SS "first, last, nth(n)"
The \fBfirst\fR and \fBlast\fR functions extract the first and last values from any array at \fB\.\fR\.
.
.P
The \fBnth(n)\fR function extracts the nth value of any array at \fB\.\fR\.
.
.IP "" 4
.
.nf

jq \'[range(\.)]|[first, last, nth(5)]\'
   10
=> [0,9,5]
.
.fi
.
.IP "" 0
.
.SS "foreach"
The \fBforeach\fR syntax is similar to \fBreduce\fR, but intended to allow the construction of \fBlimit\fR and reducers that produce intermediate results (see example)\.
.
.P
The form is \fBforeach EXP as $var (INIT; UPDATE; EXTRACT)\fR\. Like \fBreduce\fR, \fBINIT\fR is evaluated once to produce a state value, then each output of \fBEXP\fR is bound to \fB$var\fR, \fBUPDATE\fR is evaluated for each output of \fBEXP\fR with the current state and with \fB$var\fR visible\. Each value output by \fBUPDATE\fR replaces the previous state\. Finally, \fBEXTRACT\fR is evaluated for each new state to extract an output of \fBforeach\fR\.
.
.P
This is mostly useful only for constructing \fBreduce\fR\- and \fBlimit\fR\-like functions\. But it is much more general, as it allows for partial reductions (see the example below)\.
.
.IP "" 4
.
.nf

jq \'[foreach \.[] as $item ([[],[]]; if $item == null then [[],\.[0]] else [(\.[0] + [$item]),[]] end; if $item == null then \.[1] else empty end)]\'
   [1,2,3,4,null,"a","b",null]
=> [[1,2,3,4],["a","b"]]
.
.fi
.
.IP "" 0
.
.SS "Recursion"
As described above, \fBrecurse\fR uses recursion, and any jq function can be recursive\. The \fBwhile\fR builtin is also implemented in terms of recursion\.
.
.P
Tail calls are optimized whenever the expression to the left of the recursive call outputs its last value\. In practice this means that the expression to the left of the recursive call should not produce more than one output for each input\.
.
.P
For example:
.
.IP "" 4
.
.nf

def recurse(f): def r: \., (f | select(\. != null) | r); r;

def while(cond; update):
  def _while:
    if cond then \., (update | _while) else empty end;
  _while;

def repeat(exp):
  def _repeat:
    exp, _repeat;
  _repeat;
.
.fi
.
.IP "" 0
.
.SS "Generators and iterators"
Some jq operators and functions are actually generators in that they can produce zero, one, or more values for each input, just as one might expect in other programming languages that have generators\. For example, \fB\.[]\fR generates all the values in its input (which must be an array or an object), \fBrange(0; 10)\fR generates the integers between 0 and 10, and so on\.
.
.P
Even the comma operator is a generator, generating first the values generated by the expression to the left of the comma, then for each of those, the values generate by the expression on the right of the comma\.
.
.P
The \fBempty\fR builtin is the generator that produces zero outputs\. The \fBempty\fR builtin backtracks to the preceding generator expression\.
.
.P
All jq functions can be generators just by using builtin generators\. It is also possible to define new generators using only recursion and the comma operator\. If the recursive call(s) is(are) "in tail position" then the generator will be efficient\. In the example below the recursive call by \fB_range\fR to itself is in tail position\. The example shows off three advanced topics: tail recursion, generator construction, and sub\-functions\.
.
.IP "" 4
.
.nf

jq \'def range(init; upto; by): def _range: if (by > 0 and \. < upto) or (by < 0 and \. > upto) then \., ((\.+by)|_range) else \. end; if by == 0 then init else init|_range end | select((by > 0 and \. < upto) or (by < 0 and \. > upto)); range(0; 10; 3)\'
   null
=> 0, 3, 6, 9

jq \'def while(cond; update): def _while: if cond then \., (update | _while) else empty end; _while; [while(\.<100; \.*2)]\'
   1
=> [1,2,4,8,16,32,64]
.
.fi
.
.IP "" 0
.
.SH "MATH"
jq currently only has IEEE754 double\-precision (64\-bit) floating point number support\.
.
.P
Besides simple arithmetic operators such as \fB+\fR, jq also has most standard math functions from the C math library\. C math functions that take a single input argument (e\.g\., \fBsin()\fR) are available as zero\-argument jq functions\. C math functions that take two input arguments (e\.g\., \fBpow()\fR) are available as two\-argument jq functions that ignore \fB\.\fR\. C math functions that take three input arguments are available as three\-argument jq functions that ignore \fB\.\fR\.
.
.P
Availability of standard math functions depends on the availability of the corresponding math functions in your operating system and C math library\. Unavailable math functions will be defined but will raise an error\.
.
.P
One\-input C math functions: \fBacos\fR \fBacosh\fR \fBasin\fR \fBasinh\fR \fBatan\fR \fBatanh\fR \fBcbrt\fR \fBceil\fR \fBcos\fR \fBcosh\fR \fBerf\fR \fBerfc\fR \fBexp\fR \fBexp10\fR \fBexp2\fR \fBexpm1\fR \fBfabs\fR \fBfloor\fR \fBgamma\fR \fBj0\fR \fBj1\fR \fBlgamma\fR \fBlog\fR \fBlog10\fR \fBlog1p\fR \fBlog2\fR \fBlogb\fR \fBnearbyint\fR \fBpow10\fR \fBrint\fR \fBround\fR \fBsignificand\fR \fBsin\fR \fBsinh\fR \fBsqrt\fR \fBtan\fR \fBtanh\fR \fBtgamma\fR \fBtrunc\fR \fBy0\fR \fBy1\fR\.
.
.P
Two\-input C math functions: \fBatan2\fR \fBcopysign\fR \fBdrem\fR \fBfdim\fR \fBfmax\fR \fBfmin\fR \fBfmod\fR \fBfrexp\fR \fBhypot\fR \fBjn\fR \fBldexp\fR \fBmodf\fR \fBnextafter\fR \fBnexttoward\fR \fBpow\fR \fBremainder\fR \fBscalb\fR \fBscalbln\fR \fByn\fR\.
.
.P
Three\-input C math functions: \fBfma\fR\.
.
.P
See your system\'s manual for more information on each of these\.
.
.SH "I/O"
At this time jq has minimal support for I/O, mostly in the form of control over when inputs are read\. Two builtins functions are provided for this, \fBinput\fR and \fBinputs\fR, that read from the same sources (e\.g\., \fBstdin\fR, files named on the command\-line) as jq itself\. These two builtins, and jq\'s own reading actions, can be interleaved with each other\.
.
.P
Two builtins provide minimal output capabilities, \fBdebug\fR, and \fBstderr\fR\. (Recall that a jq program\'s output values are always output as JSON texts on \fBstdout\fR\.) The \fBdebug\fR builtin can have application\-specific behavior, such as for executables that use the libjq C API but aren\'t the jq executable itself\. The \fBstderr\fR builtin outputs its input in raw mode to stder with no additional decoration, not even a newline\.
.
.P
Most jq builtins are referentially transparent, and yield constant and repeatable value streams when applied to constant inputs\. This is not true of I/O builtins\.
.
.SS "input"
Outputs one new input\.
.
.SS "inputs"
Outputs all remaining inputs, one by one\.
.
.P
This is primarily useful for reductions over a program\'s inputs\.
.
.SS "debug"
Causes a debug message based on the input value to be produced\. The jq executable wraps the input value with \fB["DEBUG:", <input\-value>]\fR and prints that and a newline on stderr, compactly\. This may change in the future\.
.
.SS "stderr"
Prints its input in raw and compact mode to stderr with no additional decoration, not even a newline\.
.
.SS "input_filename"
Returns the name of the file whose input is currently being filtered\. Note that this will not work well unless jq is running in a UTF\-8 locale\.
.
.SS "input_line_number"
Returns the line number of the input currently being filtered\.
.
.SH "STREAMING"
With the \fB\-\-stream\fR option jq can parse input texts in a streaming fashion, allowing jq programs to start processing large JSON texts immediately rather than after the parse completes\. If you have a single JSON text that is 1GB in size, streaming it will allow you to process it much more quickly\.
.
.P
However, streaming isn\'t easy to deal with as the jq program will have \fB[<path>, <leaf\-value>]\fR (and a few other forms) as inputs\.
.
.P
Several builtins are provided to make handling streams easier\.
.
.P
The examples below use the streamed form of \fB[0,[1]]\fR, which is \fB[[0],0],[[1,0],1],[[1,0]],[[1]]\fR\.
.
.P
Streaming forms include \fB[<path>, <leaf\-value>]\fR (to indicate any scalar value, empty array, or empty object), and \fB[<path>]\fR (to indicate the end of an array or object)\. Future versions of jq run with \fB\-\-stream\fR and \fB\-seq\fR may output additional forms such as \fB["error message"]\fR when an input text fails to parse\.
.
.SS "truncate_stream(stream_expression)"
Consumes a number as input and truncates the corresponding number of path elements from the left of the outputs of the given streaming expression\.
.
.IP "" 4
.
.nf

jq \'[1|truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]])]\'
   1
=> [[[0],2],[[0]]]
.
.fi
.
.IP "" 0
.
.SS "fromstream(stream_expression)"
Outputs values corresponding to the stream expression\'s outputs\.
.
.IP "" 4
.
.nf

jq \'fromstream(1|truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]]))\'
   null
=> [2]
.
.fi
.
.IP "" 0
.
.SS "tostream"
The \fBtostream\fR builtin outputs the streamed form of its input\.
.
.IP "" 4
.
.nf

jq \'\. as $dot|fromstream($dot|tostream)|\.==$dot\'
   [0,[1,{"a":1},{"b":2}]]
=> true
.
.fi
.
.IP "" 0
.
.SH "ASSIGNMENT"
Assignment works a little differently in jq than in most programming languages\. jq doesn\'t distinguish between references to and copies of something \- two objects or arrays are either equal or not equal, without any further notion of being "the same object" or "not the same object"\.
.
.P
If an object has two fields which are arrays, \fB\.foo\fR and \fB\.bar\fR, and you append something to \fB\.foo\fR, then \fB\.bar\fR will not get bigger, even if you\'ve previously set \fB\.bar = \.foo\fR\. If you\'re used to programming in languages like Python, Java, Ruby, Javascript, etc\. then you can think of it as though jq does a full deep copy of every object before it does the assignment (for performance it doesn\'t actually do that, but that\'s the general idea)\.
.
.P
This means that it\'s impossible to build circular values in jq (such as an array whose first element is itself)\. This is quite intentional, and ensures that anything a jq program can produce can be represented in JSON\.
.
.P
All the assignment operators in jq have path expressions on the left\-hand side (LHS)\. The right\-hand side (RHS) procides values to set to the paths named by the LHS path expressions\.
.
.P
Values in jq are always immutable\. Internally, assignment works by using a reduction to compute new, replacement values for \fB\.\fR that have had all the desired assignments applied to \fB\.\fR, then outputting the modified value\. This might be made clear by this example: \fB{a:{b:{c:1}}} | (\.a\.b|=3), \.\fR\. This will output \fB{"a":{"b":3}}\fR and \fB{"a":{"b":{"c":1}}}\fR because the last sub\-expression, \fB\.\fR, sees the original value, not the modified value\.
.
.P
Most users will want to use modification assignment operators, such as \fB|=\fR or \fB+=\fR, rather than \fB=\fR\.
.
.P
Note that the LHS of assignment operators refers to a value in \fB\.\fR\. Thus \fB$var\.foo = 1\fR won\'t work as expected (\fB$var\.foo\fR is not a valid or useful path expression in \fB\.\fR); use \fB$var | \.foo = 1\fR instead\.
.
.P
Note too that \fB\.a,\.b=0\fR does not set \fB\.a\fR and \fB\.b\fR, but \fB(\.a,\.b)=0\fR sets both\.
.
.SS "Update\-assignment: |="
This is the "update" operator \'|=\'\. It takes a filter on the right\-hand side and works out the new value for the property of \fB\.\fR being assigned to by running the old value through this expression\. For instance, (\.foo, \.bar) |= \.+1 will build an object with the "foo" field set to the input\'s "foo" plus 1, and the "bar" field set to the input\'s "bar" plus 1\.
.
.P
The left\-hand side can be any general path expression; see \fBpath()\fR\.
.
.P
Note that the left\-hand side of \'|=\' refers to a value in \fB\.\fR\. Thus \fB$var\.foo |= \. + 1\fR won\'t work as expected (\fB$var\.foo\fR is not a valid or useful path expression in \fB\.\fR); use \fB$var | \.foo |= \. + 1\fR instead\.
.
.P
If the right\-hand side outputs no values (i\.e\., \fBempty\fR), then the left\-hand side path will be deleted, as with \fBdel(path)\fR\.
.
.P
If the right\-hand side outputs multiple values, only the first one will be used (COMPATIBILITY NOTE: in jq 1\.5 and earlier releases, it used to be that only the last one was used)\.
.
.IP "" 4
.
.nf

jq \'(\.\.|select(type=="boolean")) |= if \. then 1 else 0 end\'
   [true,false,[5,true,[true,[false]],false]]
=> [1,0,[5,1,[1,[0]],0]]
.
.fi
.
.IP "" 0
.
.SS "Arithmetic update\-assignment: +=, \-=, *=, /=, %=, //="
jq has a few operators of the form \fBa op= b\fR, which are all equivalent to \fBa |= \. op b\fR\. So, \fB+= 1\fR can be used to increment values, being the same as \fB|= \. + 1\fR\.
.
.IP "" 4
.
.nf

jq \'\.foo += 1\'
   {"foo": 42}
=> {"foo": 43}
.
.fi
.
.IP "" 0
.
.SS "Plain assignment: ="
This is the plain assignment operator\. Unlike the others, the input to the right\-hand\-side (RHS) is the same as the input to the left\-hand\-side (LHS) rather than the value at the LHS path, and all values output by the RHS will be used (as shown below)\.
.
.P
If the RHS of \'=\' produces multiple values, then for each such value jq will set the paths on the left\-hand side to the value and then it will output the modified \fB\.\fR\. For example, \fB(\.a,\.b)=range(2)\fR outputs \fB{"a":0,"b":0}\fR, then \fB{"a":1,"b":1}\fR\. The "update" assignment forms (see above) do not do this\.
.
.P
This example should show the difference between \'=\' and \'|=\':
.
.P
Provide input \'{"a": {"b": 10}, "b": 20}\' to the programs:
.
.P
\&\.a = \.b
.
.P
\&\.a |= \.b
.
.P
The former will set the "a" field of the input to the "b" field of the input, and produce the output {"a": 20, "b": 20}\. The latter will set the "a" field of the input to the "a" field\'s "b" field, producing {"a": 10, "b": 20}\.
.
.P
Another example of the difference between \'=\' and \'|=\':
.
.P
null|(\.a,\.b)=range(3)
.
.P
outputs \'{"a":0,"b":0}\', \'{"a":1,"b":1}\', and \'{"a":2,"b":2}\', while
.
.P
null|(\.a,\.b)|=range(3)
.
.P
outputs just \'{"a":0,"b":0}\'\.
.
.SS "Complex assignments"
Lots more things are allowed on the left\-hand side of a jq assignment than in most languages\. We\'ve already seen simple field accesses on the left hand side, and it\'s no surprise that array accesses work just as well:
.
.IP "" 4
.
.nf

\&\.posts[0]\.title = "JQ Manual"
.
.fi
.
.IP "" 0
.
.P
What may come as a surprise is that the expression on the left may produce multiple results, referring to different points in the input document:
.
.IP "" 4
.
.nf

\&\.posts[]\.comments |= \. + ["this is great"]
.
.fi
.
.IP "" 0
.
.P
That example appends the string "this is great" to the "comments" array of each post in the input (where the input is an object with a field "posts" which is an array of posts)\.
.
.P
When jq encounters an assignment like \'a = b\', it records the "path" taken to select a part of the input document while executing a\. This path is then used to find which part of the input to change while executing the assignment\. Any filter may be used on the left\-hand side of an equals \- whichever paths it selects from the input will be where the assignment is performed\.
.
.P
This is a very powerful operation\. Suppose we wanted to add a comment to blog posts, using the same "blog" input above\. This time, we only want to comment on the posts written by "stedolan"\. We can find those posts using the "select" function described earlier:
.
.IP "" 4
.
.nf

\&\.posts[] | select(\.author == "stedolan")
.
.fi
.
.IP "" 0
.
.P
The paths provided by this operation point to each of the posts that "stedolan" wrote, and we can comment on each of them in the same way that we did before:
.
.IP "" 4
.
.nf

(\.posts[] | select(\.author == "stedolan") | \.comments) |=
    \. + ["terrible\."]
.
.fi
.
.IP "" 0
.
.SH "MODULES"
jq has a library/module system\. Modules are files whose names end in \fB\.jq\fR\.
.
.P
Modules imported by a program are searched for in a default search path (see below)\. The \fBimport\fR and \fBinclude\fR directives allow the importer to alter this path\.
.
.P
Paths in the a search path are subject to various substitutions\.
.
.P
For paths starting with "~/", the user\'s home directory is substituted for "~"\.
.
.P
For paths starting with "$ORIGIN/", the path of the jq executable is substituted for "$ORIGIN"\.
.
.P
For paths starting with "\./" or paths that are "\.", the path of the including file is substituted for "\."\. For top\-level programs given on the command\-line, the current directory is used\.
.
.P
Import directives can optionally specify a search path to which the default is appended\.
.
.P
The default search path is the search path given to the \fB\-L\fR command\-line option, else \fB["~/\.jq", "$ORIGIN/\.\./lib/jq", "$ORIGIN/\.\./lib"]\fR\.
.
.P
Null and empty string path elements terminate search path processing\.
.
.P
A dependency with relative path "foo/bar" would be searched for in "foo/bar\.jq" and "foo/bar/bar\.jq" in the given search path\. This is intended to allow modules to be placed in a directory along with, for example, version control files, README files, and so on, but also to allow for single\-file modules\.
.
.P
Consecutive components with the same name are not allowed to avoid ambiguities (e\.g\., "foo/foo")\.
.
.P
For example, with \fB\-L$HOME/\.jq\fR a module \fBfoo\fR can be found in \fB$HOME/\.jq/foo\.jq\fR and \fB$HOME/\.jq/foo/foo\.jq\fR\.
.
.P
If "$HOME/\.jq" is a file, it is sourced into the main program\.
.
.SS "import RelativePathString as NAME [<metadata>];"
Imports a module found at the given path relative to a directory in a search path\. A "\.jq" suffix will be added to the relative path string\. The module\'s symbols are prefixed with "NAME::"\.
.
.P
The optional metadata must be a constant jq expression\. It should be an object with keys like "homepage" and so on\. At this time jq only uses the "search" key/value of the metadata\. The metadata is also made available to users via the \fBmodulemeta\fR builtin\.
.
.P
The "search" key in the metadata, if present, should have a string or array value (array of strings); this is the search path to be prefixed to the top\-level search path\.
.
.SS "include RelativePathString [<metadata>];"
Imports a module found at the given path relative to a directory in a search path as if it were included in place\. A "\.jq" suffix will be added to the relative path string\. The module\'s symbols are imported into the caller\'s namespace as if the module\'s content had been included directly\.
.
.P
The optional metadata must be a constant jq expression\. It should be an object with keys like "homepage" and so on\. At this time jq only uses the "search" key/value of the metadata\. The metadata is also made available to users via the \fBmodulemeta\fR builtin\.
.
.SS "import RelativePathString as $NAME [<metadata>];"
Imports a JSON file found at the given path relative to a directory in a search path\. A "\.json" suffix will be added to the relative path string\. The file\'s data will be available as \fB$NAME::NAME\fR\.
.
.P
The optional metadata must be a constant jq expression\. It should be an object with keys like "homepage" and so on\. At this time jq only uses the "search" key/value of the metadata\. The metadata is also made available to users via the \fBmodulemeta\fR builtin\.
.
.P
The "search" key in the metadata, if present, should have a string or array value (array of strings); this is the search path to be prefixed to the top\-level search path\.
.
.SS "module <metadata>;"
This directive is entirely optional\. It\'s not required for proper operation\. It serves only the purpose of providing metadata that can be read with the \fBmodulemeta\fR builtin\.
.
.P
The metadata must be a constant jq expression\. It should be an object with keys like "homepage"\. At this time jq doesn\'t use this metadata, but it is made available to users via the \fBmodulemeta\fR builtin\.
.
.SS "modulemeta"
Takes a module name as input and outputs the module\'s metadata as an object, with the module\'s imports (including metadata) as an array value for the "deps" key\.
.
.P
Programs can use this to query a module\'s metadata, which they could then use to, for example, search for, download, and install missing dependencies\.
.
.SH "COLORS"
To configure alternative colors just set the \fBJQ_COLORS\fR environment variable to colon\-delimited list of partial terminal escape sequences like \fB"1;31"\fR, in this order:
.
.IP "\(bu" 4
color for \fBnull\fR
.
.IP "\(bu" 4
color for \fBfalse\fR
.
.IP "\(bu" 4
color for \fBtrue\fR
.
.IP "\(bu" 4
color for numbers
.
.IP "\(bu" 4
color for strings
.
.IP "\(bu" 4
color for arrays
.
.IP "\(bu" 4
color for objects
.
.IP "" 0
.
.P
The default color scheme is the same as setting \fB"JQ_COLORS=1;30:0;39:0;39:0;39:0;32:1;39:1;39"\fR\.
.
.P
This is not a manual for VT100/ANSI escapes\. However, each of these color specifications should consist of two numbers separated by a semi\-colon, where the first number is one of these:
.
.IP "\(bu" 4
1 (bright)
.
.IP "\(bu" 4
2 (dim)
.
.IP "\(bu" 4
4 (underscore)
.
.IP "\(bu" 4
5 (blink)
.
.IP "\(bu" 4
7 (reverse)
.
.IP "\(bu" 4
8 (hidden)
.
.IP "" 0
.
.P
and the second is one of these:
.
.IP "\(bu" 4
30 (black)
.
.IP "\(bu" 4
31 (red)
.
.IP "\(bu" 4
32 (green)
.
.IP "\(bu" 4
33 (yellow)
.
.IP "\(bu" 4
34 (blue)
.
.IP "\(bu" 4
35 (magenta)
.
.IP "\(bu" 4
36 (cyan)
.
.IP "\(bu" 4
37 (white)
.
.IP "" 0
.
.SH "BUGS"
Presumably\. Report them or discuss them at:
.
.IP "" 4
.
.nf

https://github\.com/stedolan/jq/issues
.
.fi
.
.IP "" 0
.
.SH "AUTHOR"
Stephen Dolan \fB<mu@netsoc\.tcd\.ie>\fR
