2016-04-13 12 views
0

私は現在、Odata用のクエリービルダーをビルドしています。Odata jsonクエリビルダ変換。再帰?

私はこのプロジェクトからインスピレーションを取った:

http://mfauveau.github.io/angular-query-builder/

私は今、クエリのjson解釈をしています。

しかし、odataで作業するために使用するフレームワークImは、別の形式です。

私の問題は、クエリが無限にネストできることです。

私は、出力のこの種の必要があります。

{ 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" 
} 

私はこの問題を解決するためにいくつかのアドバイスを必要とするD」。

私に役立つリンクやアイデアがある場合は、

私は感謝します。

答えて

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; 
    } 
関連する問題