mirror of
https://github.com/fluencelabs/jsonpath
synced 2025-03-30 21:51:02 +00:00
90 lines
2.5 KiB
JavaScript
90 lines
2.5 KiB
JavaScript
import * as jpw from "@browser/jsonpath-wasm";
|
|
import * as jp from "jsonpath/jsonpath.js";
|
|
|
|
function run(message, iter, cb) {
|
|
return new Promise(function(resolve, _reject) {
|
|
let d = Date.now();
|
|
for (let i = 0; i < iter; i++) {
|
|
cb();
|
|
}
|
|
msg([message, Date.now() - d].join(", "));
|
|
setTimeout(resolve, 0);
|
|
})
|
|
}
|
|
|
|
function msg(msg) {
|
|
console.log(msg);
|
|
let div = document.createElement("div");
|
|
div.innerText = msg;
|
|
document.body.appendChild(div);
|
|
}
|
|
|
|
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 path = '$..book[?(@.price<30 && @.category=="fiction")]';
|
|
let template = jpw.compile(path);
|
|
let selector = jpw.selector(json);
|
|
|
|
let ptr = jpw.alloc_json(json);
|
|
if(ptr == 0) console.error('invalid ptr');
|
|
|
|
let iterCount = 2000;
|
|
|
|
run('jsonpath', iterCount, function() { jp.query(json, path) })
|
|
.then(function() {
|
|
return run('jsonpath-wasm- selector', iterCount, function() { selector(path) });
|
|
})
|
|
.then(function() {
|
|
return run('jsonpath-wasm- compile', iterCount, function() { template(json) });
|
|
})
|
|
.then(function() {
|
|
return run('jsonpath-wasm- compile-alloc', iterCount, function() { template(ptr) });
|
|
})
|
|
.then(function() {
|
|
return run('jsonpath-wasm- select', iterCount, function() { jpw.select(json, path) });
|
|
})
|
|
.then(function() {
|
|
return run('jsonpath-wasm- select-alloc', iterCount, function() { jpw.select(ptr, path) });
|
|
})
|
|
.finally(function() {
|
|
if(!jpw.dealloc_json(ptr)) {
|
|
console.error('fail to dealloc');
|
|
}
|
|
});
|