JSPM

  • Created
  • Published
  • Downloads 66628
  • Score
    100M100P100Q153841F
  • License MIT

Run jq in node

Package Exports

  • node-jq

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (node-jq) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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:

const jq = require('node-jq')

const filter = '.abilities[].moves'
const jsonPath = '/path/to/bulbasaur.json'
const options = {}

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

Description List Default
Specify the type of input '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: '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

Description List Default
Specify the type of output 'pretty', 'json', '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: 'string'

Return the output as a String.

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

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