Dojo是一個(gè)JavaScript工具包,提供了許多實(shí)用的功能。其中之一是將JSON轉(zhuǎn)換為一棵樹(shù)的功能。在Dojo中,使用dojo/data/ObjectStore和dojo/store/Memory組合,將JSON數(shù)據(jù)處理成樹(shù)狀結(jié)構(gòu)。
下面是將JSON數(shù)據(jù)轉(zhuǎn)換為一棵樹(shù)的代碼片段:
require(["dojo/data/ObjectStore", "dojo/store/Memory"], function(ObjectStore, Memory){ var data = [ { id: 1, name: "中國(guó)", parentId: 0 }, { id: 2, name: "浙江省", parentId: 1 }, { id: 3, name: "杭州市", parentId: 2 }, { id: 4, name: "上城區(qū)", parentId: 3 }, { id: 5, name: "下城區(qū)", parentId: 3 }, { id: 6, name: "江蘇省", parentId: 1 }, { id: 7, name: "南京市", parentId: 6 }, { id: 8, name: "鼓樓區(qū)", parentId: 7 }, { id: 9, name: "玄武區(qū)", parentId: 7 }, ]; var memoryStore = new Memory({ data: data }); var objectStore = new ObjectStore({ objectStore: memoryStore }); // 將 parentId 為 0 的節(jié)點(diǎn)作為根節(jié)點(diǎn) var rootId = 0; var rootNode = { id: rootId, name: "根節(jié)點(diǎn)", children: [] }; // 獲取 parentId 為 rootId 的節(jié)點(diǎn) objectStore.query({ parentId: rootId }).forEach(function(item){ var node = { id: item.id, name: item.name, children: [] }; // 獲取當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn) objectStore.query({ parentId: item.id }).forEach(function(child){ node.children.push({ id: child.id, name: child.name }); }); // 將子節(jié)點(diǎn)添加到當(dāng)前節(jié)點(diǎn)中 rootNode.children.push(node); }); console.log(rootNode); });
以上代碼中,首先使用了Dojo中的dojo/data/ObjectStore和dojo/store/Memory組合創(chuàng)建了一個(gè)數(shù)據(jù)存儲(chǔ)區(qū),在初始化時(shí),將JSON數(shù)據(jù)傳入Memory中。
然后,創(chuàng)建了一個(gè)根節(jié)點(diǎn),根節(jié)點(diǎn)的parentId設(shè)為0,接著使用objectStore.query函數(shù)獲取parentId為0的節(jié)點(diǎn),遍歷這些節(jié)點(diǎn),并將它們的子節(jié)點(diǎn)逐一獲取,添加到根節(jié)點(diǎn)的children數(shù)組中。
最后,得到的rootNode就是一棵樹(shù)。
上一篇c 怎么讀取json