jsonsql
Version:
A SQL-like query language for JSON objects.
220 lines (216 loc) • 5.5 kB
JavaScript
var dataSource = {
'4866102f06de4f38bc30592e001cf423': {
beat: {},
holy: {addr: '88:63:df:a0:d7:03', name: 'CREEPY'},
user: '',
config: {},
id: '4866102f06de4f38bc30592e001cf423',
state: 2
},
'd07872f7d2e8447bbe874bbfd3fb0296': {
beat: {},
holy: {
addr: '5c:51:4f:50:3a:88',
name: 'REDSHIT'
},
user: '',
config: {},
id: 'd07872f7d2e8447bbe874bbfd3fb0296',
state: 0
},
'd935869b80f542a9bf3f6a59d4f635f1': {
beat: {},
holy: {addr: '20:76:93:23:a6:c8', name: 'CREEPY'},
user: '',
config: {},
id: 'd935869b80f542a9bf3f6a59d4f635f1',
state: 0
},
'b92acdf9865c483dab4cc9474bc2b559': {
beat: {},
holy: {
addr: '77:7d:88:77:ff:8b',
name: 'REDSHIT'
},
user: '',
config: {},
id: 'b92acdf9865c483dab4cc9474bc2b559',
state: 0
},
'741dc8f96dfa4bcc863278b908a4467d': {
beat: {},
holy: {addr: '60:d9:c7:41:d4:71', name: 'CREEPY'},
user: '',
config: {},
id: '741dc8f96dfa4bcc863278b908a4467d',
state: 0
},
'ef2316c1b57a4b13a12ef40905c635db': {
beat: {},
holy: {
addr: '58:ba:67:08:8b:f6',
name: 'REDSHIT'
},
user: '',
config: {},
id: 'ef2316c1b57a4b13a12ef40905c635db',
state: 0
},
'5b58a2fb901d4c1fa1bc417315fca19c': {
beat: {},
holy: {
addr: '6e:6c:ba:0f:86:ca',
name: 'REDSHIT'
},
user: '',
config: {},
id: '5b58a2fb901d4c1fa1bc417315fca19c',
state: 0
},
'5508298049ef49529d573aa7e40fff0a': {
beat: {},
holy: {
addr: '5e:be:e5:1a:ba:ab',
name: 'REDSHIT'
},
user: '',
config: {},
id: '5508298049ef49529d573aa7e40fff0a',
state: 0
},
'e9c9a8689687402fa04df4d057b1acad': {
beat: {},
holy: {
addr: '6c:70:9f:c9:db:df',
name: 'REDSHIT'
},
user: '',
config: {},
id: 'e9c9a8689687402fa04df4d057b1acad',
state: 0,
},
'fe1c5639e54b44e58e80eb6f5fa8496f': {
beat: {},
holy: {
addr: '28:47:aa:26:59:6d',
name: 'REDSHIT'
},
user: '',
config: {},
id: 'fe1c5639e54b44e58e80eb6f5fa8496f',
state: 0
},
'dc5d8b1c142144309be7e4959ac5d308': {
beat: {},
holy: {
addr: '4e:ca:45:7e:69:49',
name: 'REDSHIT'
},
user: '',
config: {},
id: 'dc5d8b1c142144309be7e4959ac5d308',
state: 0
},
'39a68900680448b18b3c440489246786': {
beat: {},
holy: {
addr: '65:9c:b7:1e:25:e4',
name: 'REDSHIT'
},
user: '',
config: {},
id: '39a68900680448b18b3c440489246786',
state: 0
},
'5f7e72a168264eff8063d634e9065c29': {
beat: {},
holy: {
addr: '43:f8:9c:08:f1:b6',
name: 'REDSHIT'
},
user: '',
config: {},
id: '5f7e72a168264eff8063d634e9065c29',
state: 0
},
'0ad27529a85543f28b5692ca46e965c4': {
beat: {},
holy: {
addr: '71:2d:cf:1c:cf:87',
name: 'REDSHIT'
},
user: '',
config: {},
id: '0ad27529a85543f28b5692ca46e965c4',
state: 0
},
'1f69203d5f354272afc3471bcb7d5b34': {
beat: {},
holy: {addr: '5c:51:4f:50:3a:84', name: 'CREEPY'},
user: '',
config: {},
id: '1f69203d5f354272afc3471bcb7d5b34',
state: 0
},
'684e387466324f7bbae2ccbf01aed5ff': {
beat: {},
holy: {
addr: '44:00:6b:6c:a6:88',
name: 'REDSHIT'
},
user: '',
config: {},
id: '684e387466324f7bbae2ccbf01aed5ff',
state: 0
},
'f2476e81698e42d3b62d5cea3888fd98': {
beat: {},
holy: {
addr: '4f:f8:fe:af:5b:43',
name: 'REDSHIT'
},
user: '',
config: {},
id: 'f2476e81698e42d3b62d5cea3888fd98',
state: 0
},
'f2de1084a1f142258d5849428f09e39f': {
beat: {},
holy: {
addr: '77:32:8a:c5:dd:63',
name: 'REDSHIT'
},
user: '',
config: {},
id: 'f2de1084a1f142258d5849428f09e39f',
state: 0,
date: '2012-05'
},
'cff9580b2efa4a2ba84784c1ac80eb09': {
beat: {},
holy: {
addr: '7f:e8:ee:32:cd:15',
name: 'CRAP'
},
user: '',
config: {},
id: 'cff9580b2efa4a2ba84784c1ac80eb09',
state: 1
}
};
function __iterate(obj) {
for (var k in obj) {
if (obj.hasOwnProperty(k)) {
if (!Array.isArray(obj[k]) && typeof obj[k] === 'object') {
__iterate(obj[k]);
} else {
console.log(k, ':', obj[k]);
}
}
}
}
var Query = require('../index');
var res = Query(dataSource, '* where holy.name=CRAP || (holy.name=CREEPY && (state=1 || state=2))');
console.log('======RESULT 1\n',res);
var res = Query(dataSource, '*.id, *.holy.addr where holy.name=CRAP');
console.log('======RESULT 2\n',res);