Json Query
Install
npm i gson-query
and use with
const query = require("gson-query")
At first, json-query acts like a normal json-pointer where its match
is passed to the given callback function:
const query = require("gson-query");
const data = {
"parent": {
"child": {"id": "child-1"}
}
};
query.run(data, "#/parent/child/id", (value, key, object, jsonPointer) => {
});
var match = query.get(data, "#/parent/child/id");
But query also supports glob-patterns with *
:
const query = require("gson-query");
const data = {
"parent": {
"child": {"id": "child-1"}
},
"neighbour": {
"child": {"id": "child-2"}
}
};
query.run(data, "#/*/child/id", function (value, key, object, jsonPointer) {
});
var match = query.get(data, "#/parent/child/id");
and glob-patterns with **
:
var query = require("gson-query");
var data = {
"parent": {
"child": {"id": "child-1"}
},
"neighbour": {
"child": {"id": "child-2"}
}
};
query.run(data, "#/**/id", function (value, key, object, jsonPointer) {
});
or simply call query.run(data, "#/**", callback)
to run callback on each object,array and value.
To filter the matched objects, an object-query string may be appended on each single step:
var query = require("gson-query");
var data = {
"parent": {
"valid": true,
"child": {"id": "child-1"}
},
"neighbour": {
"valid": false,
"child": {"id": "child-2"}
},
"dungeons": {
"child": {"id": "child-3"}
}
};
query.run(data, "#/**?valid:true&&ignore:undefined/child", function (value, key, object, jsonPointer) {
});
query.run(data, "#/**?valid:!false/child", function (value, key, object, jsonPointer) {
or match all objects that have a defined property valid like query.run(data, "#/**?valid", callback)
.
regular expression must be wrapped with {.*}
:
var query = require("gson-query");
var data = {
"albert": {valid: true},
"alfred": {valid: false},
"alfons": {valid: true}
};
query.run(data, "#/{al[^b]}?valid:true", function (value, key, object, jsonPointer) {
});
queryGet
If you only require values or pointers, use queryGet to receive an Array or Object as result:
var queryGet = require("gson-query").get;
var arrayOfValues = queryGet(data, "#/**/id", queryGet.VALUE);
var arrayOfJsonPointers = queryGet(data, "#/**/id", queryGet.POINTER);
var arrayOfAllFourArguments = queryGet(data, "#/**/id", queryGet.ALL);
var mapOfPointersAndData = queryGet(data, "#/**/id", queryGet.MAP);
queryDelete
Multiple items on objects or in arrays may also be delete with query.delete:
var queryDelete = require("gson-query").delete;
queryDelete(data, "#/**/*/data");
Examples
query.run(data, "#/**/*", callback);
will iterate over each value of the data objectquery.run(data, "#/**?valid:true", callback);
will select all objects having its property "valid" set to true
for further examples refer to the unit tests