Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kantord/jq-in-the-browser
JSON processor for web use (jq port)
https://github.com/kantord/jq-in-the-browser
frontend jq json json-processing nodejs query query-language web
Last synced: 2 months ago
JSON representation
JSON processor for web use (jq port)
- Host: GitHub
- URL: https://github.com/kantord/jq-in-the-browser
- Owner: kantord
- License: mit
- Created: 2018-02-03T06:58:43.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-12-15T17:38:54.000Z (about 1 year ago)
- Last Synced: 2024-10-03T09:29:37.489Z (3 months ago)
- Topics: frontend, jq, json, json-processing, nodejs, query, query-language, web
- Language: JavaScript
- Homepage: https://kantord.github.io/jq-in-the-browser/
- Size: 121 KB
- Stars: 26
- Watchers: 3
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# DISCONTINUED in favor of [emuto](https://github.com/kantord/emuto)
# jq-in-the-browser
jq-in-the-browser is a JavaScript port of jq. [Try it online](https://runkit.com/kantord/runkit-npm-jq-in-the-browser)
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
```javascript
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:
```json
{
"names": [
"Mary",
"Rupert",
"Jane",
"John"
]
}
```## Comparison with alternatives
### jq-web
- jq-web is an emcripten port of jq, thus it implements all of its features
- ... but it's also too big for many purposes (in the megabytes)
- jq-in-the-browser is written from scratch, but is more limited in features
- ... and also much much smaller :-)### node-jq
- node-jq is great, but it doesn't work in the browser.### 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]```