#jq #jjq #js-json-query

app js-json-query

A tool for processing JSON inputs with JavaScript, no dsl

3 unstable releases

0.4.0 Feb 7, 2022
0.3.1 Feb 4, 2022
0.3.0 Feb 3, 2022

#12 in #jq

MIT/Apache and GPL-3.0-only

149 lines

jjq Crates.io Tags License

A tool for processing JSON inputs with JavaScript, no dsl!


jq is an awesome tool if you know it well go ahead, use it.

I don't use jq all the time, and consequently I don't remember its filter DSL syntax, however I do know JavaScript, so it's easier and quicker for me to fire node and do whatever I want.

jjq is a convenient way to combine usability of jq and scripting ability of nodejs.


By default, if no code is passed, jjq will pretty print the input json to stdout.

The input json can be accessed in the script with the variable name it.


jjq 'it.feeds[0].multiMedia[0]' -f jsonfilewithhierarchy-100-100.json

echo '{"key": "value"}' | jjq

jjq 'it[0]' < EmployeeData.json

cat EmployeeData.json | jjq 'it.map(t => ({name: t.name, age: t.email}))'

# pass `-i` flag to include a js file
jjq 'let p = it.map(t => t.password); max(p.map(len))' -i demos/libs.js -f EmployeeData.json


If you have rust toolchain installed, you can just do

cargo install js-json-query

Getting rust toolchain is super easy, head over here if you are interested.

Alternatively, you can download pre-build binaries from the release page.


Usage: jjq [<script>] [-f <file>] [-v] [-i <includes>]

A tool for processing JSON inputs with JavaScript, no dsl

Positional Arguments:
  script            code to process the json input

  -f, --file        path to json file
  -v, --version     get version information
  -i, --includes    js files to include
  --help            display usage information


  • The code passed should be a valid JavaScript code as this uses v8 engine to run the script therefore sometimes it can get quite verbose.

  • The script passed should end with an expression not statement, if statement ends the script then undefined will be printed.


jjq 'let t = it.key;' --file your-json-file.json # output -> undefined

jjq 'let t = it.key; t' --file your-json-file.json # output json -> {...}


~1.5M SLoC