2016-12-02 143 views
0

我是Jquery的新手,任何人都可以幫助我或告訴我如何處理此問題, 我嘗試了一些其他示例,但我沒有得到它們。Json數據嵌套Json數據

var arr = [ 
      { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Delete" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Delete" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Delete" } 
      ], 

我需要這個JSON數據轉換爲類似這樣的嵌套數據,

[{ 
    text: "Resource Management", 
    items: [{ 
     text: "Manpower",   
     items: [{ 
      text: "Update", 
     }, { 
      text: "Delete", 
     }, { 
      text: "Insert", 
     }, { 
      text: "View", 
     }] 
    }, { 
     text: "Vehicles", 
     items: [{ 
      text: "Update", 
     }, { 
      text: "Delete", 
     }, { 
      text: "Insert", 
     }, { 
      text: "View", 
     }] 
    }]   
}, { 
    text: "Contacts", 
    items: [{ 
     text: "Manage Customers", 
     items: [{ 
      text: "Update", 
     }, { 
      text: "Delete", 
     }, { 
      text: "Insert", 
     }, { 
      text: "View", 
     }] 
    }] 
}] 

提前感謝!請幫助我。

+3

您是否嘗試過這麼遠嗎? – Hiral

+0

你也可以按標準解釋小組嗎? – GiuServ

回答

1

在純JS(有點原始的,更好的解決方案,歡迎):

var arr = [ 
    { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Update" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "View" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Delete" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "Insert" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Update" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "View" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Insert" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Delete" }, 
    { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Update" }, 
    { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "View" }, 
    { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Insert" }, 
    { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Delete" } 
]; 

var output = []; 

arr.forEach(function(item) { 
    var indexParentNode = addItem(item.PARENTNODE, output); 
    var indexChildNode = addItem(item.CHILDNODE, output[indexParentNode].items); 
    addItem(item.OPERATIONNAME, output[indexParentNode].items[indexChildNode].items, true); 
}); 

function addItem(item, arr, withNoItems) { 
    var index = indexOf(item, arr); 
    var tpl = {text: item, items: []}; 

    if (!! withNoItems) delete tpl.items; 

    if (index === -1) { 
     arr.push(tpl); 
     return arr.length - 1; 
    } 
    else { 
     return index; 
    } 
} 

function indexOf(needle, haystack) { 
    var i = 0; 

    while (i < haystack.length) { 
     if (haystack[i].text === needle) return i; 
     i++; 
    } 

    return -1; 
} 

console.log(output); 
0

不是最完美的解決方案,但這裏有一個出發點:

<script type="text/javascript"> 
    'use strict'; 

    var arr = [ 
      { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Delete" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Delete" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Delete" } 
      ]; 

    function getOrCreateListItem(list, searchItemName) 
    { 
     var newItem = null; 

     //Get item if it's already in the list 
     for (var item of list) { 
      if (item.text == searchItemName) { 
       newItem = item; 
       break; 
      } 
     } 

     //If no item found, create new item 
     if (!newItem) { 
      list.push({ 
       text: searchItemName, 
       items: [] 
      }); 
      newItem = list[list.length-1]; 
     } 

     return newItem; 
    } 

    var newData = []; 

    for (var item of arr) { 

     //Get parent item 
     var parent = getOrCreateListItem(newData, item.PARENTNODE); 

     //Get child item 
     var child = getOrCreateListItem(parent.items, item.CHILDNODE); 

     //Add child item data 
     child.items.push({text: item.OPERATIONNAME}); 
    } 

    console.log(newData); 

</script> 
+0

謝謝@nerdword,在childnode項目中獲取操作名稱但是我得到父項目外的子節點。 –

+0

@RaviKumar我剛剛更改了代碼示例以便使用數組而不是對象(手動搜索以查找列表中的現有項目)。這會給你一個更接近的結果。 – Nerdwood