2016-05-02 11 views
4

Angular Tree Controlに表示したい非常に大きいjson schemaがあります。しかし、jsonスキーマは、Angular Tree Controlでサポートされているトレモデル形式ではありません。たとえば、スキーマ内の子(プロパティ)は配列内にありません。 jsonスキーマをトレモデル形式に変換するにはどうすればいいですか?jsonスキーマを角度ツリー制御トレモデルに変換する

スキーマは(ネスティングの最大10のレベルのより複雑除く)は、このようなものになります。それは、角ツリーコントロールで正しくレンダリングするために

{ 
    "type": "object", 
    "properties": { 
     "firstName": { 
      "type": "string" 
     }, 
     "lastName": { 
      "type": "string" 
     }, 
     "address": { 
      "type": "object", 
      "properties": { 
       "addressLine1": { 
         "type": "string" 
        }, 
        "addressLine2": { 
         "type": "string" 
        } 
      } 
     } 
    } 
} 

を、それがこのように見える必要があります:

{ 
     "type": "object", 
     "properties": [ 
      { 
       "name": "firstName", 
       "type": "string" 
      }, 
      { 
       "name": "lastName", 
       "type": "string" 
      }, 
      { 
       "name": "address", 
       "type": "object", 
       "properties": [ 
         { 
          "name": "addressLine1", 
          "type": "string" 
         }, 
         { 
          "name": "addressLine2", 
          "type": "string" 
         } 
       ] 
      } 
     ] 
    } 
+0

あなたの現在のスキーマの例を共有することはできますか? –

+0

スキーマの例で編集 – user3920421

答えて

0

これは一例であり、リファクタリングしてより深いレベルに再帰することができます。

var data = { 
 
    "type": "object", 
 
    "properties": { 
 
     "firstName": { 
 
      "type": "string" 
 
     }, 
 
     "lastName": { 
 
      "type": "string" 
 
     }, 
 
     "address": { 
 
      "type": "object", 
 
      "properties": { 
 
       "addressLine1": { 
 
         "type": "string" 
 
        }, 
 
        "addressLine2": { 
 
         "type": "string" 
 
        } 
 
      } 
 
     } 
 
    } 
 
}; 
 

 
function toTreeModel(obj){ 
 
\t var treeModel = {}; 
 

 
\t for (var a in obj) { 
 
\t \t if(a === 'properties'){ 
 
\t \t \t treeModel[a] = [] 
 
\t \t \t var i = 0; 
 
\t \t \t var e = 0; 
 
\t \t \t for(b in obj[a]){ 
 
\t \t \t \t if(obj[a][b].type === 'object'){ 
 
\t \t \t \t \t treeModel[a][i] = {name: b, type: obj[a][b].type, properties: []}; 
 
\t \t \t \t \t for(c in obj[a][b].properties){ 
 
\t \t \t \t \t \t treeModel[a][i].properties.push({name: c, type: obj[a][b].properties[c].type}); 
 
\t \t \t \t \t \t e++; 
 
\t \t \t \t \t } 
 
\t \t \t \t } else { 
 
\t \t \t \t \t treeModel[a][i] = {name: b, type: obj[a][b].type}; 
 
\t \t \t \t } 
 
\t \t \t \t i++; 
 
\t \t \t } 
 
\t \t } else { 
 
\t \t \t treeModel[a] = obj[a]; 
 
\t \t } 
 
\t } 
 
\t return treeModel; 
 
} 
 

 
var toTree = toTreeModel(data); 
 
// console.log(toTree); 
 
document.getElementById("output").innerHTML = JSON.stringify(toTree, undefined, 2);
<pre id="output"> 
 
</pre>

関連する問題