2019-04-13 22:27:33 +09:00
# jsonpath-wasm
[](https://travis-ci.org/freestrings/jsonpath)
It is Webassembly version of [jsonpath_lib ](https://github.com/freestrings/jsonpath ) that is [JsonPath ](https://goessner.net/articles/JsonPath/ ) engine written in Rust.
## APIs
* [jsonpath.Selector ](#jsonpathselector )
2019-04-13 22:47:11 +09:00
* [jsonpath.select(json: string|object, jsonpath: string) ](#jsonpathselectjson-stringobject-jsonpath-string )
* [jsonpath.compile(jsonpath: string) ](#jsonpathcompilejsonpath-string )
* [jsonpath.selector(json: string|object) ](#jsonpathselectorjson-stringobject )
2019-04-13 22:27:33 +09:00
* [Other Examples ](https://github.com/freestrings/jsonpath/wiki/Javascript-examples )
### jsonpath.Selector
2019-05-15 18:19:00 +09:00
> The selectTo function is deprecated since 0.1.3. please use the selectAs function instead.
2019-05-14 22:48:36 +09:00
2019-04-13 22:27:33 +09:00
```javascript
2019-05-15 16:10:14 +09:00
let jsonpath = require('jsonpath-wasm');
2019-04-13 22:27:33 +09:00
let jsonObj = {
"school": {
"friends": [
{"name": "친구1", "age": 20},
{"name": "친구2", "age": 20}
]
},
"friends": [
{"name": "친구3", "age": 30},
{"name": "친구4"}
]
};
2019-05-15 16:10:14 +09:00
let selector = new jsonpath.Selector();
selector.value(jsonObj);
2019-04-13 22:27:33 +09:00
{
2019-05-15 16:10:14 +09:00
selector.path('$..[?(@.age >= 30)]');
let jsonObj = selector.selectAs();
2019-04-13 22:27:33 +09:00
let resultObj = [{"name": "친구3", "age": 30}];
console.log(JSON.stringify(jsonObj) === JSON.stringify(resultObj));
}
{
2019-05-15 16:10:14 +09:00
selector.path('$..[?(@.age == 20)]');
let jsonObj = selector.selectAs();
2019-04-13 22:27:33 +09:00
let resultObj = [{"name": "친구1", "age": 20}, {"name": "친구2", "age": 20}];
console.log(JSON.stringify(jsonObj) === JSON.stringify(resultObj));
}
{
2019-05-15 16:10:14 +09:00
selector.value({"friends": [ {"name": "친구5", "age": 20} ]});
let jsonObj = selector.selectAs();
2019-04-13 22:27:33 +09:00
let resultObj = [{"name": "친구5", "age": 20}];
console.log(JSON.stringify(jsonObj) === JSON.stringify(resultObj));
}
2019-05-15 16:10:14 +09:00
{
selector.value(jsonObj);
selector.map(function(v) {
let f1 = v[0];
f1.age = 30;
return v;
});
let resultObj1 = [{"name": "친구1", "age": 30}, {"name": "친구2", "age": 20}];
console.log(JSON.stringify(selector.get()) === JSON.stringify(resultObj1));
selector.path('$..[?(@.age == 20)]');
let jsonObj1 = selector.selectAs();
let resultObj2 = [{"name": "친구2", "age": 20}];
console.log(JSON.stringify(jsonObj1) === JSON.stringify(resultObj2));
}
2019-04-13 22:27:33 +09:00
```
### jsonpath.select(json: string|object, jsonpath: string)
```javascript
let jsonObj = {
"school": {
"friends": [
{"name": "친구1", "age": 20},
{"name": "친구2", "age": 20}
]
},
"friends": [
{"name": "친구3", "age": 30},
{"name": "친구4"}
]
};
let ret = [
{"name": "친구3", "age": 30},
{"name": "친구1", "age": 20}
];
let selectAsString = jsonpath.select(JSON.stringify(jsonObj), '$..friends[0]');
let selectAsObj = jsonpath.select(jsonObj, '$..friends[0]');
console.log(
JSON.stringify(ret) == JSON.stringify(selectAsString),
JSON.stringify(ret) == JSON.stringify(selectAsObj)
);
// => true, true
```
### jsonpath.compile(jsonpath: string)
```javascript
let template = jsonpath.compile('$..friends[0]');
let jsonObj = {
"school": {
"friends": [
{"name": "친구1", "age": 20},
{"name": "친구2", "age": 20}
]
},
"friends": [
{"name": "친구3", "age": 30},
{"name": "친구4"}
]
};
let ret = [
{"name": "친구3", "age": 30},
{"name": "친구1", "age": 20}
];
let selectAsString = template(JSON.stringify(jsonObj));
let selectAsObj = template(jsonObj);
console.log(
JSON.stringify(ret) == JSON.stringify(selectAsString),
JSON.stringify(ret) == JSON.stringify(selectAsObj)
);
// => true, true
let jsonObj2 = {
"school": {
"friends": [
{"name": "Millicent Norman"},
{"name": "Vincent Cannon"}
]
},
"friends": [ {"age": 30}, {"age": 40} ]
};
let ret2 = [
{"age": 30},
{"name": "Millicent Norman"}
];
let selectAsString2 = template(JSON.stringify(jsonObj2));
let selectAsObj2 = template(jsonObj2);
console.log(
JSON.stringify(ret2) == JSON.stringify(selectAsString2),
JSON.stringify(ret2) == JSON.stringify(selectAsObj2)
);
// => true, true
```
### jsonpath.selector(json: string|object)
```javascript
let jsonObj = {
"school": {
"friends": [
{"name": "친구1", "age": 20},
{"name": "친구2", "age": 20}
]
},
"friends": [
{"name": "친구3", "age": 30},
{"name": "친구4"}
]
};
let ret1 = [
{"name": "친구3", "age": 30},
{"name": "친구1", "age": 20}
];
let ret2 = [
{"name": "친구4"},
{"name": "친구2", "age": 20}
];
let selector = jsonpath.selector(jsonObj);
// or as json string
// let selector = jsonpath.selector(JSON.stringify(jsonObj));
let select1 = selector('$..friends[0]');
let select2 = selector('$..friends[1]');
console.log(
JSON.stringify(ret1) == JSON.stringify(select1),
JSON.stringify(ret2) == JSON.stringify(select2)
);
// => true, true
```