Odata json查询构建器转换。递归?

时间:2016-04-13 13:23:46

标签: recursion odata breeze

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

我需要一些建议来解决这个问题。

所以,如果你有一个链接或一些可以帮助我的想法。

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

   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;
    }