DISCONTINUED in favor of emuto

jq-in-the-browser

jq-in-the-browser is a JavaScript port of jq. Try it online

Instead of processing serialized data, jq-in-the-browser processes JavaScript objects. It is written from scratch and is relatively small. (~33 kB, ~6.1 kB gzipped)

Install

npm install --save jq-in-the-browser

Usage

import jq from 'jq-in-the-browser'

const query = jq('{"names": [.[] | .name]}')

query([
  {"name": "Mary", "age": 22},
  {"name": "Rupert", "age": 29},
  {"name": "Jane", "age": 11},
  {"name": "John", "age": 42}
])

Output:

{
  "names": [
    "Mary",
    "Rupert",
    "Jane",
    "John"
  ]
}

Comparison with alternatives

jq-web

node-jq

something else?

If you know an alternative, feel free to create a pull request. :-)

Supported features

Feature Example
Identity ., .
Array Index .[0], .[1 ], .[-1], .[ 1][0], .[1][1].x, .[1][1].x[0], .[ -1 ]
Object Identifier-Index .foo, .bar, .bar.x, .foo[1]
Generic Object Index .["foo"], .["bar"].x, .bar[ "y"], .["2bar"], .["a b" ]
Pipe .a \| .b, .a\|.b
Parentheses ( .a), ((.a)), (-1 ), (-5.5), (.4), (. \| .)
Addition (numbers) 1 + 1, .a + [.b][0], .b + .a, 3 + 4.1 + .a, 3 + (-3)
Subtraction (numbers) .a - .b, .b - .a, 4- 3, -3 -(4)
Multiplication (numbers) 1 * 1, .a * [.b][0], .b * .a, 3 * 4.1 * .a, 3 * (-.3)
Modulo (numbers) 1 % 1, .a % [.b][0], .b % .a, 3 % 4 % .a
Division (numbers) .a / .b, .b / .a, 4/ 3, -3/(4), -1.1 + (3 * (((.4 - .b) / .a) + .b))
Array Construction [], [ ], [4], [ -6, [0]], [7 \| 4], [.], [. \| [6]], [5, 6] \| .
Object Construction {}, { }, {"foo": 6}, {"foo": 6, "bar": [5, 3]}, {"x": 3} \| {"y": .x}, {foo: "bar"}, {({"a": "b"} \| .a): true}, {"a": 4, "b": 3, "c": -1, "d": "f"}
Integer literal 3, ` 6, -4, 0, 8`
Float literal .3, 6.0, -4.001, 3.14, 0.1
Boolean literal true, false
Double quote String literal "true", "false", "foo", ["ba'r"]
length [] \| length, length
keys keys
keys_unsorted keys_unsorted
to_entries . \| to_entries
from_entries . \| from_entries
reverse . \| reverse
map map(.+1 ), . \| map( {foo: .})
map_values map_values(.+1 ), . \| map_values( {foo: .})
with_entries with_entries({key: .key, value: (2 * .value)}), with_entries({key: "a", value: (2 * .value)})
tonumber tonumber
tostring tostring
sort sort, [4, 5, 6] \| sort
sort_by sort_by(-.), sort_by(1 + .), sort_by(1)
join join(", "), join(""), join(.[0])
Additive inverse -(1 + 3), -(-1), .a \| -(.b), [--1]
Array Construction [], [4]
Array/Object Value Iterator .[], .[ ]
Array/Object Value Iterator 2 .["foo"][], .foo[]
Pipe .[] \| ., .[] \| .name
Stream as object value {names: .[] \| .name}, {"names": .[] \| .name, "ages": .[] \| .age}, {"names": .[] \| .name, "x": 3}, {"names": 5.4, "x": .[] \| .age}, {names: 5.4, ages: .[] \| .age, ages2: .[] \| .id}
Array/String slice .[2:4], .[0:1]