Analyse, transform, and selectively extract data from JSON documents (and JavaScript objects).
npm install JSONPath
In node.js:
var jsonPath = require('JSONPath');
jsonPath.eval(obj, path);
For browser usage you can directly include lib/jsonpath.js
, no browserify
magic necessary:
<script type="text/javascript" src="lib/jsonpath.js"></script>
<script type="text/javascript">
jsonPath.eval(obj, path);
</script>
Given the following JSON, taken from http://goessner.net/articles/JsonPath/ :
{
"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
}
}
}
XPath | JSONPath | Result |
---|---|---|
/store/book/author | $.store.book[*].author | the authors of all books in the store |
//author | $..author | all authors |
/store/* | $.store.* | all things in store, which are some books and a red bicycle. |
/store//price | $.store..price | the price of everything in the store. |
//book[3] | $..book[2] | the third book |
//book[last()] | $..book[(@.length-1)] | the last book in order. |
| $..book[-1:] |
//book[position()<3]|
Running the tests on node: npm test
. For in-browser tests:
- Ensure that nodeunit is browser-compiled:
cd node_modules/nodeunit; make browser;
- Serve the js/html files:
node -e "require('http').createServer(function(req,res) { \
var s = require('fs').createReadStream('.' + req.url); \
s.pipe(res); s.on('error', function() {}); }).listen(8082);"
- To run the tests visit http://localhost:8082/test/test.html.