我目前正在为 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;
}