2014-07-05 165 views
0

我試圖使用dhtmlxtreegrid顯示樹Javascript-JSON:構建分層樹

我需要幫助從平面JSON創建分層樹數據。

我的JSON數據是這樣的:

{ 
    "rows": [ 
     { 
      "id": "01", // child id 
      "parentid": "00", // parent Id 
      "data": [ 
       "101831", 
       "Work", 
       "Desc-4-1" 
      ] 
     }, 
     { 
      "id": "02", 
      "parentid": "01", 
      "data": [ 
       "101832", 
       "No Work", 
       "Desc-4-0" 
      ] 
     }, 
     { 
      "id": "03", 
      "parentid": "01", 
      "data": [ 
       "101835", 
       "Work", 
       "Desc-5-0" 
      ] 
     }, 
     { 
      "id": "04", 
      "parentid": "03", 
      "data": [ 
       "101835", 
       "Work", 
       "Desc-5-1" 
      ] 
     } 
    ] 
} 

結果JSON應該是分層樹形結構:

{ 
    "rows": [ 
     { 
      "id": "01", 
      "parentid": "00", 
      "data": [ 
       "101831", 
       "Work", 
       "Desc-4-1" 
      ], 
      "rows": [ 
       { 
        "id": "02", 
        "parentid": "01", 
        "data": [ 
         "101832", 
         "No Work", 
         "Desc-4-0" 
        ] 
       }, 
       { 
        "id": "0", 
        "parentid": "01", 
        "data": [ 
         "101835", 
         "Work", 
         "Desc-5-0" 
        ] 
       } 
      ] 
     } 
    ] 
} 
+0

你確定你的JSON數據是正確的? – Mritunjay

+0

是的,這是正確的格式 – Nambi

+0

你到目前爲止嘗試過什麼? – pasty

回答

-1

,如果我正確地理解你的問題,我已經嘗試了許多東西,我得到這個工作。

您的JSON數據: -

var data = { 
"rows": [ 
    { 
     "id": "01", // child id 
     "parentid": "00", // parent Id 
     "data": [ 
      "101831", 
      "Work", 
      "Desc-4-1" 
     ] 
    }, 
    { 
     "id": "02", 
     "parentid": "01", 
     "data": [ 
      "101832", 
      "No Work", 
      "Desc-4-0" 
     ] 
    }, 
    { 
     "id": "03", 
     "parentid": "01", 
     "data": [ 
      "101835", 
      "Work", 
      "Desc-5-0" 
     ] 
    } 
] 
} 

功能來改變結構。

var addRowsToLastChild = function(obj1,rowsToAppend){ 
//if that object has rows key check in that row otherwise add rows to the object 
    if(obj1["rows"]){ 
     addRowsToLastChild(obj1["rows"][0],rowsToAppend); 
     return; 
    } 
    obj1["rows"] = []; 
    obj1["rows"][0] = rowsToAppend; 
    obj1; 
} 

var resultJSON = data.rows.reduce(function(obj1,obj2){ 
    addRowsToLastChild(obj1,obj2); 
    // object are passed by refference so any changes in obj1 will be affected 
    return obj1; 
},{}); 

的結果將是: -

{ 
"rows": [ 
    { 
     "id": "01", 
     "parentid": "00", 
     "data": [ 
      "101831", 
      "Work", 
      "Desc-4-1" 
     ], 
     "rows": [ 
      { 
       "id": "02", 
       "parentid": "01", 
       "data": [ 
        "101832", 
        "No Work", 
        "Desc-4-0" 
       ], 
       "rows": [{ 
       "id": "03", 
       "parentid": "01", 
       "data": [ 
        "101835", 
        "Work", 
        "Desc-5-0" 
       ] 
      } 
      ] 
      } 

     ] 
    } 
] 
}; 
+0

非常感謝Mritunjay ...你能分享一下可執行代碼嗎?似乎有些代碼缺失... – Nambi

+0

你能告訴我你得到的錯誤/問題是什麼嗎? – Mritunjay

+0

我只有這段代碼,並在變量'data'中添加了JSON數據,現在我也添加了這個。 – Mritunjay

0

,如果你在這裏需要一個C#的解決方案是爲您生成的C#代碼的鏈接。

http://json2csharp.com/

根據您的結果JSON數據這裏是C#代碼:

public class Row2 
{ 
    public string id { get; set; } 
    public string parentid { get; set; } 
    public List<string> data { get; set; } 
} 

public class Row 
{ 
    public string id { get; set; } 
    public string parentid { get; set; } 
    public List<string> data { get; set; } 
    public List<Row2> rows { get; set; } 
} 

public class RootObject 
{ 
    public List<Row> rows { get; set; } 
}