Package Exports
- jsonpathly
- jsonpathly/dist/index.es.js
- jsonpathly/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (jsonpathly) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
A Typescript DSL for reading JSON documents.
Install
Install from npm:
$ npm install jsonpathlyInstall from yarn:
$ yarn add jsonpathlyGetting Started
import jp from 'jsonpathly';
const cities = [
{ name: 'London', population: 8615246 },
{ name: 'Berlin', population: 3517424 },
{ name: 'Madrid', population: 3165235 },
{ name: 'Rome', population: 2870528 },
];
const names = jp.query(cities, '$..name');
// [ "London", "Berlin", "Madrid", "Rome" ]JsonPath expressions always refer to a JSON structure in the same way as XPath expression are used in combination
with an XML document. The "root member object" in JsonPath is always referred to as $ regardless if it is an
object or array.
JsonPath expressions can use the dot–notation
$.store.book[0].title
or the bracket–notation
$['store']['book'][0]['title']
Operators
| Operator | Description |
|---|---|
$ |
The root element to query. This starts all path expressions. |
@ |
The current node being processed by a filter predicate. |
* |
Wildcard. Available anywhere a name or numeric are required. |
.. |
Deep scan. Available anywhere a name is required. |
.<name> |
Dot-notated child |
['<name>' (, '<name>')] |
Bracket-notated child or children |
[<number> (, <number>)] |
Array index or indexes |
[start🔚step] |
A python like array slice operator |
[?(<expression>)] |
Filter expression. Expression must evaluate to a boolean value. |
Filter Operators
Filters are logical expressions used to filter arrays. A typical filter would be [?(@.age > 18)] where @ represents the current item being processed. More complex filters can be created with logical operators && and ||. String literals must be enclosed by single or double quotes ([?(@.color == 'blue')] or [?(@.color == "blue")]).
| Operator | Description |
|---|---|
| == | left is equal to right (note that 1 is not equal to '1') |
| != | left is not equal to right |
| < | left is less than right |
| <= | left is less or equal to right |
| > | left is greater than right |
| >= | left is greater than or equal to right |
| in | left exists in right [?(@.size in ['S', 'M'])] |
| nin | left does not exists in right |
| subsetof | left is a subset of right [?(@.sizes subsetof ['S', 'M', 'L'])] |
| anyof | left has an intersection with right [?(@.sizes anyof ['M', 'L'])] |
| noneof | left has no intersection with right [?(@.sizes noneof ['M', 'L'])] |
| sizeof | size of left (array or string) should match right (array or string) |
| size | size of left (array or string) should match right (number) |
| empty | left (array or string) should be empty |
Methods
jp.query(obj, pathExpression[, options])
Find elements in obj matching pathExpression. Returns an array of elements that satisfy the provided JSONPath expression, or an empty array if none were matched.
import jp from 'jsonpathly';
const authors = jp.query(data, '$..author');
// [ 'Nigel Rees', 'Evelyn Waugh', 'Herman Melville', 'J. R. R. Tolkien' ]| Option | Description |
|---|---|
| hideExceptions | This option makes sure no exceptions are propagated from path evaluation |
| returnArray | This option configures JsonPath to return an array |
jp.paths(obj, pathExpression[, options])
Find paths to elements in obj matching pathExpression. Returns an array of element paths that satisfy the provided JSONPath expression.
const paths = jp.paths(data, '$..author');
// [
// '$["store"]["book"][0]["author"]',
// '$["store"]["book"][1]["author"]',
// '$["store"]["book"][2]["author"]',
// '$["store"]["book"][3]["author"]'
// ]| Option | Description |
|---|---|
| hideExceptions | This option makes sure no exceptions are propagated from path evaluation |
jp.parse(pathExpression[, options])
Returns a typed tree representing a jsonpath expression
const tree = jp.parse('$..author');
// { type: 'root', next: { type: 'subscript', value: { type: 'dotdot', value: { type: "identifier", value: "author" } } } }| Option | Description |
|---|---|
| hideExceptions | This option makes sure no exceptions are propagated from path evaluation |
jp.stringify(tree)
Returns a jsonpath string from a tree representing jsonpath expression (jp.parse response)
const jsonpath = jp.stringify({
type: 'root',
next: { type: 'subscript', value: { type: 'dotdot', value: { type: 'identifier', value: 'author' } } },
});
// "$..author"