mirror of
https://github.com/fluencelabs/jsonpath
synced 2025-05-07 23:12:15 +00:00
nodejs/README.md - 정리, version 0.1.1
This commit is contained in:
parent
5e29b5e7a7
commit
3e3d9e8770
@ -1,3 +1,93 @@
|
|||||||
# jsonpath-rs
|
# jsonpath-rs
|
||||||
|
|
||||||
JsonPath engine for NodeJs with Rust native implementation.
|
[](https://travis-ci.org/freestrings/jsonpath)
|
||||||
|
|
||||||
|
It is [JsonPath](https://goessner.net/articles/JsonPath/) implementation. The core implementation is written in Rust-lang.
|
||||||
|
|
||||||
|
## 목차
|
||||||
|
|
||||||
|
* [jsonpath.select(json: string|object, jsonpath: string)](#json-stringobject-jsonpath-string)
|
||||||
|
* [jsonpath.compile(jsonpath: string)](#compilejsonpath-string)
|
||||||
|
* [jsonpath.selector(json: string|object)](#selectorjson-stringobject)
|
||||||
|
* [Simple time check](https://github.com/freestrings/jsonpath/wiki/Simple-timecheck-jsonpath-native)
|
||||||
|
* [Other Examples](https://github.com/freestrings/jsonpath/wiki/Javascript-examples)
|
||||||
|
|
||||||
|
### jsonpath.select(json: string|object, jsonpath: string)
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
let jsonObj = {
|
||||||
|
"school": {
|
||||||
|
"friends": [{"id": 0}, {"id": 1}]
|
||||||
|
},
|
||||||
|
"friends": [{"id": 0}, {"id": 1}]
|
||||||
|
};
|
||||||
|
let ret = [{"id": 0}, {"id": 0}];
|
||||||
|
|
||||||
|
let a = jsonpath.select(JSON.stringify(jsonObj), "$..friends[0]");
|
||||||
|
let b = jsonpath.select(jsonObj, "$..friends[0]");
|
||||||
|
console.log(
|
||||||
|
JSON.stringify(ret) == JSON.stringify(a),
|
||||||
|
JSON.stringify(a) == JSON.stringify(b)
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
### jsonpath.compile(jsonpath: string)
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
let template = jsonpath.compile("$..friends[0]");
|
||||||
|
|
||||||
|
let jsonObj = {
|
||||||
|
"school": {
|
||||||
|
"friends": [ {"id": 0}, {"id": 1} ]
|
||||||
|
},
|
||||||
|
"friends": [ {"id": 0}, {"id": 1} ]
|
||||||
|
};
|
||||||
|
|
||||||
|
let ret = JSON.stringify([ {"id": 0}, {"id": 0} ]);
|
||||||
|
|
||||||
|
// 1. read as json object
|
||||||
|
console.log(JSON.stringify(template(jsonObj)) == ret);
|
||||||
|
// 2. read as json string
|
||||||
|
console.log(JSON.stringify(template(JSON.stringify(jsonObj))) == ret);
|
||||||
|
|
||||||
|
let jsonObj2 = {
|
||||||
|
"school": {
|
||||||
|
"friends": [
|
||||||
|
{"name": "Millicent Norman"},
|
||||||
|
{"name": "Vincent Cannon"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"friends": [ {"id": 0}, {"id": 1} ]
|
||||||
|
};
|
||||||
|
|
||||||
|
let ret2 = JSON.stringify([ {"id": 0}, {"name": "Millicent Norman"} ]);
|
||||||
|
|
||||||
|
// 1. read as json object
|
||||||
|
console.log(JSON.stringify(template(jsonObj2)) == ret2);
|
||||||
|
// 2. read as json string
|
||||||
|
console.log(JSON.stringify(template(JSON.stringify(jsonObj2))) == ret2);
|
||||||
|
```
|
||||||
|
|
||||||
|
### jsonpath.selector(json: string|object)
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
let jsonObj = {
|
||||||
|
"school": {
|
||||||
|
"friends": [{"id": 0}, {"id": 1}]
|
||||||
|
},
|
||||||
|
"friends": [{"id": 0},{"id": 1}]
|
||||||
|
};
|
||||||
|
|
||||||
|
let ret1 = JSON.stringify([ {"id": 0}, {"id": 0} ]);
|
||||||
|
let ret2 = JSON.stringify([ {"id": 1}, {"id": 1} ]);
|
||||||
|
|
||||||
|
// 1. read as json object
|
||||||
|
let selector = jsonpath.selector(jsonObj);
|
||||||
|
console.log(JSON.stringify(selector("$..friends[0]")) == ret1);
|
||||||
|
console.log(JSON.stringify(selector("$..friends[1]")) == ret2);
|
||||||
|
|
||||||
|
// 2. read as json string
|
||||||
|
let selector = jsonpath.selector(JSON.stringify(jsonObj));
|
||||||
|
console.log(JSON.stringify(selector("$..friends[0]")) == ret1);
|
||||||
|
console.log(JSON.stringify(selector("$..friends[1]")) == ret2);
|
||||||
|
```
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "jsonpath-rs",
|
"name": "jsonpath-rs",
|
||||||
"version": "0.1.0",
|
"version": "0.1.1",
|
||||||
"description": "JsonPath engine for NodeJs with Rust native implementation.",
|
"description": "It is native binding of JsonPath engine written in Rust",
|
||||||
"author": "Changseok Han <freestrings@gmail.com>",
|
"author": "Changseok Han <freestrings@gmail.com>",
|
||||||
"repository": "git+https://github.com/freestrings/jsonpath",
|
"repository": "git+https://github.com/freestrings/jsonpath",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"keywords": ["jsonpath", "native", "rustlang", "json"],
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"neon-cli": "^0.2.0",
|
"neon-cli": "^0.2.0",
|
||||||
|
@ -28,3 +28,72 @@ describe('select test', () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('filter test', () => {
|
||||||
|
it('complex filter1', (done) => {
|
||||||
|
let json = {
|
||||||
|
'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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'expensive': 10,
|
||||||
|
};
|
||||||
|
|
||||||
|
let target = [
|
||||||
|
{
|
||||||
|
category: 'fiction',
|
||||||
|
author: 'Evelyn Waugh',
|
||||||
|
title: 'Sword of Honour',
|
||||||
|
price: 12.99,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
category: 'fiction',
|
||||||
|
author: 'J. R. R. Tolkien',
|
||||||
|
title: 'The Lord of the Rings',
|
||||||
|
isbn: '0-395-19395-8',
|
||||||
|
price: 22.99,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
category: 'reference',
|
||||||
|
author: 'Nigel Rees',
|
||||||
|
title: 'Sayings of the Century',
|
||||||
|
price: 8.95,
|
||||||
|
}]
|
||||||
|
;
|
||||||
|
|
||||||
|
let result = jsonpath.select(json, '$..book[?((@.price == 12.99 || $.store.bicycle.price < @.price) || @.category == "reference")]');
|
||||||
|
if (JSON.stringify(result) === JSON.stringify(target)) {
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user