Skip to content

Repository files navigation

node-jq logo


node-jq is a wrapper for jq - a lightweight and flexible command-line JSON processor.


Installation

npm install node-jq --save

Usage

jq example

Usually in your CLI with jq you would run:

jq ".abilities[].moves" bulbasaur.json

and you would get

{
"name": "heartgold-soulsilver",
"power": "10"
}
{
"name": "platinum",
"power": "50"
}
{
"name": "diamond-pearl",
"power": "99"
}

node-jq equivalent

With node-jq you could run it programmatically and interact with the output as a JavaScript Object:

constjq=require('node-jq')constfilter='.abilities[].moves'constjsonPath='/path/to/bulbasaur.json'constoptions={}jq.run(filter,jsonPath,options).then((output)=>{console.log(output)/* { "name": "heartgold-soulsilver", "power": "10" }, { "name": "platinum", "power": "50" }, { "name": "diamond-pearl", "power": "99" } */}).catch((err)=>{console.error(err)// Something went wrong...})

Options

input

DescriptionTypeValuesDefault
Type of inputstring'file', 'json', 'string''file'

input: 'file'

Run the jq query against a JSON file.

jq.run('.','/path/to/file.json').then(console.log)// {// "foo": "bar"// }

input: 'file'

Run jq query against multiple JSON files.

jq.run('.',['/path/to/file.json','path/to/other_file.json']).then(console.log)// {// "foo": "bar"// }// {// "otherFoo": "andBar"// }

input: 'json'

Run the jq query against an Object.

jq.run('.',{foo: 'bar'},{input: 'json'}).then(console.log)// {// "foo": "bar"// }

input: 'string'

Run the jq query against a String.

jq.run('.','{ foo: "bar" }',{input: 'string'}).then(console.log)// {// "foo": "bar"// }

output

DescriptionValuesDefault
Type of output'pretty', 'json', 'compact', 'string''pretty'

output: 'pretty'

Return the output as a String.

jq.run('.','/path/to/file.json',{output: 'string'}).then(console.log)// {// "foo": "bar"// }

output: 'json'

Return the output as an Object.

jq.run('.','/path/to/file.json',{output: 'json'}).then(console.log)// { foo: 'bar' }

output: 'compact'|'string'

Return the output as a String.

jq.run('.','/path/to/file.json',{output: 'compact'}).then(console.log)// {"foo":"bar"}jq.run('.','/path/to/file.json',{output: 'string'}).then(console.log)// {"foo":"bar"}

slurp

DescriptionValuesDefault
Read input stream into arraytrue, falsefalse

slurp: true

Read input stream into array.

jq.run('.',['/path/to/file.json','/path/to/other_file.json'],{output: 'json',slurp: true}).then(console.log)// [// {// "foo": "bar"// },// {// "otherFoo": "andBar"// }// ]

sort

DescriptionValuesDefault
Sort object keys in alphabetical ordertrue, falsefalse

sort: true

Sorts object keys alphabetically.

jq.run('.',['/path/to/file.json'],{output: 'json',sort: true}).then(console.log)// {// "a": 2,// "b": 1// },

Projects using node-jq

Why?

Why would you want to manipulate JavaScript Objects with jq syntax in a node app, when there are tools like lodash? The idea was to port jq in node to be able to run it as-is. node-jq doesn't try to replace Object filters, maps, or transformations.

Our primary goal was to make jq syntax available in Atom with atom-jq.

Other than that, jq is an interesting CLI tool to quickly parse the response of an API, such as:

curl 'https://jsonplaceholder.typicode.com/comments'| jq '.[].postId'

There are also people dealing with complex responses:

Want to learn jq?

Seems hard to learn, but it really isn't.

jq is like sed for JSON. Slice, filter, map and transform structured data in a simple and powerful way.

Take a look at this great introduction or a jq lesson.

You can check out the official manual and fiddle around in the online playground jqplay.org.

License

MIT

About

node-jq is a node wrapper for jq

Resources

Stars

0 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages