jsonpath-proxy
v1.0.3
Published
JSONPath expressions as first class JS object properties
Readme
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-proxyJSONPath 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
