我目前正在为Odata构建一个查询生成器。
我从这个项目中获得了灵感:
http://mfauveau.github.io/angular-query-builder/.
我现在确实有了查询的json解释。
但是,我用来处理odata的框架有一种不同的格式。
我的问题是查询可能被无限嵌套。
我需要这种输出:
{ or: [
age: { ">": 40 },
and: [
{ lastName: { startsWith: 'A'}},
{ hireDate: { '<': new Date(2010, 0, 1) }}
]
]
}
我有这样的输入:
{
"rules": [
{
"condition": "=",
"field": "ID",
"data": "1",
"$$hashKey": "object:244"
},
{
"condition": "=",
"field": "ID",
"data": "1",
"$$hashKey": "object:310"
},
{
"group": {
"operator": "AND",
"rules": [
{
"condition": "=",
"field": "ID",
"data": "1",
"$$hashKey": "object:392"
},
{
"condition": "=",
"field": "ID",
"data": "1",
"$$hashKey": "object:456"
}
]
},
"$$hashKey": "object:363"
}
],
"operator": "OR"
}
我需要一些建议来解决这个问题。
所以,如果你有一个链接或一些想法可以帮助我。
我将不胜感激。
function convertQueryBuilderToBreeze(filtre) {
var jsonObject = {};
if (filtre.rules && filtre.operator) {
jsonObject[filtre.operator] = filtre.rules.map(function (rule) {
if (rule.condition) {
var condition = {};
var obj = {};
obj[rule.condition] = rule.data;
condition[rule.field] = obj;
return condition;
} else if (rule.group) {
return convertQueryBuilderToBreeze(rule.group);
}
});
}
return jsonObject;
}