2016-04-13 8 views
0

Ich baue gerade einen Abfrage-Generator für Odata.Odata JSON Abfrage Builder Transformation. Rekursion?

Ich fand seine Inspiration aus diesem Projekt:

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

Ich habe jetzt eine JSON-Interpretation der Abfrage.

Aber das Framework, das ich verwende, um mit Odata zu arbeiten, hat ein anderes Format.

Mein Problem ist, dass die Abfrage unendlich geschachtelt werden könnte.

Ich brauche diese Art der Ausgabe:

{ or: [ 
    age: { ">": 40 }, 
    and: [ 
     { lastName: { startsWith: 'A'}}, 
     { hireDate: { '<': new Date(2010, 0, 1) }} 
    ] 
    ] 
} 

Und ich habe diesen Eingang:

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

Ich würde ein paar Ratschläge benötigen, dieses Problem zu lösen.

Also, wenn Sie einen Link oder einige Ideen, die mir helfen könnten.

Ich wäre dankbar.

Antwort

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