1.0.3 • Published 4 years ago

jsonpath-proxy v1.0.3

Weekly downloads
4
License
MIT
Repository
-
Last release
4 years ago

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.

JSONPathDescription
$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:

JSONPathDescription
$.store.book["*"].authorThe authors of all books in the store
$[".."].authorAll authors
$.store.["*"]All things in store, which are some books and a red bicycle
$.store[".."].priceThe 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:

JSONPathDescription
$.store.book[*].authorThe authors of all books in the store
$..authorAll authors
$.store.*All things in store, which are some books and a red bicycle
$.store..priceThe 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

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago