I want to validate json tree with conditions (AND, NOT, OR) and id keys. Something like that:
{
"OR": [
{
"AND": [
{
"NOT": [
{
"id": 2
}
]
},
{
"id": 2
}
]
},
{
"AND": [
{
"id": 3
},
{
"id": 3
}
]
}
]
}
This is valid tree. But if json contains any other operations or has empty ([], {}) it will be invalid. For example,
{
"X": [ //INVALID TAG
{
"AND": [
{
"NOT": [
{
//EMPTY
}
]
},
{
"id": 2
}
]
},
{
"AND": [
{
"id": 3
},
{
"id": 3
}
]
}
]
}
My code:
var validateRule = function (js) {
console.log('current validation ' + JSON.stringify(js));
if (js.hasOwnProperty('OR')) {
return js.hasOwnProperty('length') ? js.length > 0 && validateRule(js.OR) : validateRule(js.OR);
}
if (js.hasOwnProperty('AND')) {
return js.hasOwnProperty('length') ? js.length > 0 && validateRule(js.AND) : validateRule(js.AND);
}
if (js.hasOwnProperty('NOT')) {
return js.hasOwnProperty('length') ? js.length > 0 && validateRule(js.NOT) : validateRule(js.NOT);
}
if (js.hasOwnProperty('length')) { //JSON Array
if (js.length == 0) {
return false;
} else if (js.length == 1) {
return js[0].hasOwnProperty('id');
} else {
for (var key in js) {
if (js.hasOwnProperty(key)) {
return validateRule(js[key]);
}
}
}
} else {
return js.hasOwnProperty('id');
}
};
But since in loop i have 'return' code not work properly. Give me advice please.