Skip to content


Switch branches/tags


npm version npm dependents Downloads run on

jaycue is my little side project that mimics the best parts jq in pure JavaScript. I wrote a blog post about it on

I am TDD'ing this to get some practice, using the jq documentation, and hopefully make something useful. Please see below for some similar, more mature, great projects built around jq.


$ npm install jaycue


const jq = require('jaycue');

console.log(jq({foo: 123}, '.foo'));

Supported Filters

Basic Filters

  "value": 42,
  "text": "less interesting data",
  "name": {
    "first": "Brian"
    "last": "Olore"
filter output
. { "value": 42, "text": "less interesting data","name": { "first": "Brian" "last": "Olore" } } (object)
.value 42 (number)
.text less interesting data (string)
.["text"] less interesting data (string)
.name "name": { "first": "Brian" "last": "Olore" } (object)
.name.first Brian (string)
.missing undefined
.missing? null
.["missing"]? null

Array Filters

filter output
.[] "a","b","c","d","e" (not json)
.[0] a
.[-2] d

Array Slicing Filters

filter output
.[2:4] ["c", "d"]
.[:3] ["a", "b", "c"]
.[:-3] ["a", "b"]
.[-2:] ["d", "e"]
.[2:] ["c", "d", "e"]

Select Function

  {"id": "first", "val": 1},
  {"id": "second", "val": 2}
filter output
.[] | select(.id == "second") {"id": "second", "val": 2}
.[] | select(.id == "second") | .val 2 (number)
.[] | select(.id == "second") .val 2 (number)
.[] | select(.id != "second") .val 1 (number)


Must have jq installed to run tests jq is now supplied by node-jq

As previously mentioned, all code has been test-driven. The test-helper provides a way to call the actual jq, making it easy to compare results.

Running tests

npm test


Read the jq Language Description

Check out this project which is a JavaScript wrapper around jq: Here are some more cool jq projects:


  • Logo by Joseph Olore