All Projects → sanack → Node Jq

sanack / Node Jq

Licence: mit
Node.js wrapper for jq

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Node Jq

Jq Web
jq in the browser with emscripten.
Stars: ✭ 188 (+27.89%)
Mutual labels:  json, jq
Emuto
manipulate JSON files
Stars: ✭ 180 (+22.45%)
Mutual labels:  json, jq
Json Splora
GUI for editing, visualizing, and manipulating JSON data
Stars: ✭ 1,818 (+1136.73%)
Mutual labels:  json, jq
Jqr
R interface to jq
Stars: ✭ 123 (-16.33%)
Mutual labels:  json, jq
Java Jq
Lightweight Java wrapper around JQ, a flexible JSON processor available for multiple platforms
Stars: ✭ 37 (-74.83%)
Mutual labels:  json, jq
Jqview
simplest possible native GUI for inspecting JSON objects with jq
Stars: ✭ 355 (+141.5%)
Mutual labels:  json, jq
Jackson Jq
jq for Jackson Java JSON Processor
Stars: ✭ 178 (+21.09%)
Mutual labels:  json, jq
Aws
A collection of bash shell scripts for automating various tasks with Amazon Web Services using the AWS CLI and jq.
Stars: ✭ 493 (+235.37%)
Mutual labels:  json, jq
Yq
Command-line YAML, XML, TOML processor - jq wrapper for YAML/XML/TOML documents
Stars: ✭ 1,688 (+1048.3%)
Mutual labels:  json, jq
Oq
A performant, and portable jq wrapper to facilitate the consumption and output of formats other than JSON; using jq filters to transform the data.
Stars: ✭ 132 (-10.2%)
Mutual labels:  json, jq
Ti Rpc
基于swoole封装的一个简易的JSON协议的RPC框架,思路是借鉴的,代码是自己写的。小修小改的,目前服务于前公司(注意是前公司)生产环境,每日支撑大约8000万次调用。
Stars: ✭ 144 (-2.04%)
Mutual labels:  json
Fleece
Json mapper for F#
Stars: ✭ 144 (-2.04%)
Mutual labels:  json
Terse Logback
Structured Logging, Tracing, and Observability with Logback
Stars: ✭ 146 (-0.68%)
Mutual labels:  json
Goconfig
goconfig uses a struct as input and populates the fields of this struct with parameters from command line, environment variables and configuration file.
Stars: ✭ 146 (-0.68%)
Mutual labels:  json
Fsharp.json
F# JSON Reflection based serialization library
Stars: ✭ 144 (-2.04%)
Mutual labels:  json
Mantle
Model framework for Cocoa and Cocoa Touch
Stars: ✭ 11,319 (+7600%)
Mutual labels:  json
Restclient.net
.NET REST Client Framework for all platforms
Stars: ✭ 143 (-2.72%)
Mutual labels:  json
React
JSON powered forms for React.js
Stars: ✭ 142 (-3.4%)
Mutual labels:  json
Generatedata
A powerful, feature-rich, random test data generator.
Stars: ✭ 1,883 (+1180.95%)
Mutual labels:  json
Ladybug
A powerful model framework for Swift 4
Stars: ✭ 147 (+0%)
Mutual labels:  json

node-jq logo


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


Installation

$ npm install node-jq --save
# or
$ yarn add node-jq

Advanced installation

By default, node-jq downloads jq on the installation process (when you run npm install node-jq). Downloads the binaries according to your SO.

After that to run jq directly. Like: ./node_modules/node-jq/bin/jq . package.json.

If you want to skip the installation of jq, set NODE_JQ_SKIP_INSTALL_BINARY to 'true' like:

$ export NODE_JQ_SKIP_INSTALL_BINARY=true
$ npm install node-jq

Usage

jq example

Usually in your CLI using jq:

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

and you 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:

NOTE: Take care of the filter that you are using with jq, mapping an array or any other iterative output isn't a valid JavaScript Object, that might fail at parse-time.

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

path to jq binary

By default, the jq binary installed with the package is used. If you have special needs or want to use another binary in a different path you can set the environment variable JQ_PATH to override the default behaviour.

input

Description Type Values Default
Type of input string '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

Description Values Default
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

Description Values Default
Read input stream into array true, false false

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

Description Values Default
Sort object keys in alphabetical order true, false false

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 inside a nodejs app, when there are tools like ramda or lodash?

The idea was to port jq in node to be able to run it as-is. node-jq doesn't try to replace Array/Object filters, maps, transformations, and so on.

Our primary goal was to make jq syntax available inside an Atom extension: atom-jq.

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

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

There are also people dealing with complex use-cases, and some of them want to port their bash scripts to node:

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].