2017-03-18 10 views
1

私は、いくつかのJSONデータをbootstrap-treeviewのために要求されたフォーマットに変換する最良の方法を理解しようとしています。私の最初の考えは、すべてを通過して修正する何らかの再帰関数を作成することでしたが、これを実現するには本当に難しいことがあります。どんなアドバイスも大歓迎です!ここでjsonをブートストラップツリービューフォーマットに準拠させる

私のサービスによって返されるデータのコンソールログ:

Object 
    England: Object 
    London: Object 
     Bayerische Staatsbibliothek: Object 
     Cod. arab. 1251: Array[1] 
      0: Object 
      key1: "adflkjadf", 
      key2: "adflkjadfk", 
      key3: "adlkfjadf", 
      __proto__: Object 
      length: 1 
      text: "Cod. arab. 1251" 
      __proto__: Array[0] 
     Cod. arab. 1252: Array[1] 
     Cod. arab. 1253: Array[1] 
     Cod. arab. 1254: Array[1] 
     Cod. arab. 1255: Array[1] 
     Cod. arab. 1256: Array[1] 
     Cod. arab. 1257: Array[1] 
     Cod. arab. 1258: Array[1] 
     Cod. arab. 1259: Array[1] 
     Cod. arab. 1260: Array[1] 
    Germany: Object 
    Munich: Object 
     Bayerische Staatsbibliothek: Object 
     Cod. arab. 1251: Array[1] 
      0: Object 
      key1: "adflkjadf", 
      key2: "adflkjadfk", 
      key3: "adlkfjadf", 
      __proto__: Object 
      length: 1 
      text: "Cod. arab. 1251" 
      __proto__: Array[0] 
     Cod. arab. 1252: Array[1] 
     Cod. arab. 1253: Array[1] 
     Cod. arab. 1254: Array[1] 
     Cod. arab. 1255: Array[1] 
     Cod. arab. 1256: Array[1] 
     Cod. arab. 1257: Array[1] 
     Cod. arab. 1258: Array[1] 
     Cod. arab. 1259: Array[1] 
     Cod. arab. 1260: Array[1] 

ここでフォーマットはブートストラップ・ツリービューのニーズです:

var tree = [ 
    { 
    text: "Parent 1", 
    nodes: [ 
     { 
     text: "Child 1", 
     nodes: [ 
      { 
      text: "Grandchild 1" 
      }, 
      { 
      text: "Grandchild 2" 
      } 
     ] 
     }, 
     { 
     text: "Child 2" 
     } 
    ] 
    }, 
    { 
    text: "Parent 2" 
    }, 
    { 
    text: "Parent 3" 
    }, 
    { 
    text: "Parent 4" 
    }, 
    { 
    text: "Parent 5" 
    } 
]; 

ここでは、これを達成するために再帰関数での私の試みです:

function format_for_treeview(node) { 
    for (var key in node) { 
    // skip loop if the property is from prototype 
    if (!node.hasOwnProperty(key)) continue; 

    if (typeof node === 'object') { 
     format_for_treeview(node[key]); 
     if (Array.isArray(node)) { 
     node[key]['text'] = node[key]['bibliography_text']; 
     } else { 
     node[key]['text'] = key; 
     } 
    } 
    } 
} 

答えて

0

following linkの助けを借りて、私はd3の巣を発見しました()関数は、私が必要とするものをほぼ正確に行います。しかし、私はd3.jsファイルをフォークし、nest() - > entries()マップ関数で 'key'と 'values'キー名の名前を変更しなければなりませんでした。

さらに、サービス内でグループ化するのではなく、オブジェクトの配列を返すようにサービスを変更しました。

var withText = jsondata.map(function(i) { 
    i['text'] = i['bibliography_text']; 
    return i; 
    }); 

    var nestedData = d3.nest() 
    .key(function(d) { return d.country; }) 
    .key(function(d) { return d.city; }) 
    .entries(withText); 

結果出力は私に正確に上記var tree = [...]様配列を与えます。

関連する問題