Odata json 查询生成器转换。递归?

问题描述 投票:0回答:1

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

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

因此,如果您有链接或一些可以帮助我的想法。

我将不胜感激。

recursion odata breeze
1个回答
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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.