#json-input #jq #javascript #dsl #processing #file #jjq

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

#29 in #jq

MIT/Apache and GPL-3.0-only

10KB
149 lines

jjq Crates.io Tags License

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

Introduction

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.

Notes

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.

Examples

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

Installation

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

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

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

Limitations

  • 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.

Example

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 -> {...}

Dependencies

~75MB
~1.5M SLoC