@astronautlabs/jsonpath
Version:
Query JavaScript objects with JSONPath expressions. Robust / safe JSONPath engine for Node.js.
44 lines (34 loc) • 1.58 kB
text/typescript
import { suite } from 'razmin';
import * as assert from 'assert';
import * as fs from 'fs';
import * as path from 'path';
import { JSONPath } from './jsonpath';
const data = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'fixtures', 'store.json')).toString());
suite(describe => {
describe('orig-google-code-issues', it => {
it('comma in eval', () => {
var pathExpression = '$..book[?(@.price && ",")]'
var results = JSONPath.query(data, pathExpression);
assert.deepEqual(results, data.store.book);
});
it('member names with dots', () => {
var data = { 'www.google.com': 42, 'www.wikipedia.org': 190 };
var results = JSONPath.query(data, "$['www.google.com']");
assert.deepEqual(results, [ 42 ]);
});
it('nested objects with filter', () => {
var data = { dataResult: { object: { objectInfo: { className: "folder", typeName: "Standard Folder", id: "uniqueId" } } } };
var results = JSONPath.query(data, "$..object[?(@.className=='folder')]");
assert.deepEqual(results, [ data.dataResult.object.objectInfo ]);
});
it('script expressions with @ char', () => {
var data = { "DIV": [{ "@class": "value", "val": 5 }] };
var results = JSONPath.query(data, "$..DIV[?(@['@class']=='value')]");
assert.deepEqual(results, data.DIV);
});
it('negative slices', () => {
var results = JSONPath.query(data, "$..book[-1:].title");
assert.deepEqual(results, ['The Lord of the Rings']);
});
});
});