1.0.3 • Published 4 years ago
jsonpath-proxy v1.0.3
JSONPath
JSONPath expressions as first class JS object properties
Proxies jsonpath queries as JS object property chain
Usage
const $ = require('jsonpath-proxy')(json)
const result = $.path["[query]"]
Query Example
const jsonpath = require('jsonpath-proxy')
var cities = [
{ name: "London", "population": 8615246 },
{ name: "Berlin", "population": 3517424 },
{ name: "Madrid", "population": 3165235 },
{ name: "Rome", "population": 2870528 }
];
var $ = jsonpath.$(cities);
var names = $['..'].name;
// [ "London", "Berlin", "Madrid", "Rome" ]
The same example with jsonpath
var cities = [
{ name: "London", "population": 8615246 },
{ name: "Berlin", "population": 3517424 },
{ name: "Madrid", "population": 3165235 },
{ name: "Rome", "population": 2870528 }
];
const jsonpath = require('jsonpath-proxy') // same as require('jsonpath')
var names = jsonpath.query(cities, '$..name');
// [ "London", "Berlin", "Madrid", "Rome" ]
Install
Install from npm:
$ npm install jsonpath-proxy
JSONPath Syntax
Here are syntax and examples adapted from Stefan Goessner's original post introducing JSONPath in 2007.
JSONPath | Description |
---|---|
$ | The root object/element |
@ | The current object/element |
. | Child member operator |
.. | Recursive descendant operator; JSONPath borrows this syntax from E4X |
* | Wildcard matching all objects/elements regardless their names |
[] | Subscript operator |
[,] | Union operator for alternate names or array indices as a set |
[start:end:step] | Array slice operator borrowed from ES4 / Python |
?() | Applies a filter (script) expression via static evaluation |
() | Script expression via static evaluation |
Given this sample data set, see example expressions below:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
}, {
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}, {
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
}, {
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
Example jsonpath-proxy.$
expressions:
JSONPath | Description |
---|---|
$.store.book["*"].author | The authors of all books in the store |
$[".."].author | All authors |
$.store.["*"] | All things in store, which are some books and a red bicycle |
$.store[".."].price | The price of everything in the store |
$[".."]book[2] | The third book |
$[".."]book("[(@.length-1)]"] | The last book via script subscript |
$[".."]book["[-1:]"] | The last book via slice |
$[".."]book["[0,1]"] | The first two books via subscript union |
$[".."]book["[:2]"] | The first two books via subscript array slice |
$[".."]book["[?(@.isbn)]"] | Filter all books with isbn number |
$[".."]book["[?(@.price<10)]"] | Filter all books cheaper than 10 |
$[".."]book["[?(@.price==8.95)]"] | Filter all books that cost 8.95 |
$[".."]book["[?(@.price<30 && @.category=="fiction")]"] | Filter all fiction books cheaper than 30 |
$[".."]["*"] | All members of JSON structure |
Example jsonpath.query
expressions:
JSONPath | Description |
---|---|
$.store.book[*].author | The authors of all books in the store |
$..author | All authors |
$.store.* | All things in store, which are some books and a red bicycle |
$.store..price | The price of everything in the store |
$..book[2] | The third book |
$..book[(@.length-1)] | The last book via script subscript |
$..book[-1:] | The last book via slice |
$..book[0,1] | The first two books via subscript union |
$..book[:2] | The first two books via subscript array slice |
$..book[?(@.isbn)] | Filter all books with isbn number |
$..book[?(@.price<10)] | Filter all books cheaper than 10 |
$..book[?(@.price==8.95)] | Filter all books that cost 8.95 |
$..book[?(@.price<30 && @.category=="fiction")] | Filter all fiction books cheaper than 30 |
$..* | All members of JSON structure |
All other jsonpath
api methods
@see https://www.npmjs.com/package/jsonpath
License
MIT