【发布时间】:2015-01-08 01:51:25
【问题描述】:
我想用条件(AND、NOT、OR)和 id 键验证 json 树。类似的东西:
{
"OR": [
{
"AND": [
{
"NOT": [
{
"id": 2
}
]
},
{
"id": 2
}
]
},
{
"AND": [
{
"id": 3
},
{
"id": 3
}
]
}
]
}
这是有效的树。但是如果 json 包含任何其他操作或有空的 ([], {}) 它将是无效的。例如,
{
"X": [ //INVALID TAG
{
"AND": [
{
"NOT": [
{
//EMPTY
}
]
},
{
"id": 2
}
]
},
{
"AND": [
{
"id": 3
},
{
"id": 3
}
]
}
]
}
我的代码:
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');
}
};
但由于在循环中我的“返回”代码无法正常工作。请给我建议。
【问题讨论】:
-
你了解json和array的区别吗?
-
yes =) json 格式,数组是数据类型。
-
你返回不起作用,因为你只返回数组的第一个值
标签: javascript json recursion tree