天天看點

Java樹狀json_樹狀JSON

package test;

import java.util.ArrayList;

import java.util.Comparator;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Set;

import java.util.Collections;

public class MultipleTree {

public static void main(String[] args) {

// 讀取層次資料結果集清單

List dataList = VirtualDataGenerator.getVirtualResult();

// 節點清單(散清單,用于臨時存儲節點對象)

HashMap nodeList = new HashMap();

// 根節點

Node root = null;

// 将結果集存入散清單(後面将借助散清單構造多叉樹)

for (Iterator it = dataList.iterator(); it.hasNext();) {

Map dataRecord = (Map) it.next();

Node node = new Node();

node.id = (String) dataRecord.get("id");

node.text = (String) dataRecord.get("text");

node.parentId = (String) dataRecord.get("parentId");

nodeList.put(node.id, node);

}

// 構造無序的多叉樹

Set entrySet = nodeList.entrySet();

for (Iterator it = entrySet.iterator(); it.hasNext();) {

Node node = (Node) ((Map.Entry) it.next()).getValue();

if (node.parentId == null || node.parentId.equals("")) {

root = node;

} else {

((Node) nodeList.get(node.parentId)).addChild(node);

}

}

// 輸出無序的樹形菜單的JSON字元串

System.out.println(root);

// 對多叉樹進行橫向排序

root.sortChildren();

// 輸出有序的樹形菜單的JSON字元串

System.out.println(root);

// 程式輸出結果如下:

//

// 無序的樹形菜單(格式化後的結果,可使用JSON格式化工具檢視,

// 例如 線上檢視器):

//  {

//   id : '100000',

//   text : '廊坊銀行總行',

//   children : [

//     {

//     id : '110000',

//     text : '廊坊分行',

//     children : [

//       {

//       id : '113000',

//       text : '廊坊銀行開發區支行',

//       leaf : true

//       },

//       {

//       id : '111000',

//       text : '廊坊銀行金光道支行',

//       leaf : true

//       },

//       {

//       id : '112000',

//       text : '廊坊銀行解放道支行',

//       children : [

//         {

//         id : '112200',

//         text : '廊坊銀行三大街支行',

//         leaf : true

//         },

//         {

//         id : '112100',

//         text : '廊坊銀行廣陽道支行',

//         leaf : true

//         }

//       ]

//       }

//     ]

//     }

//   ]

//  }

}

}

class Node {

public String id;

public String text;

public String parentId;

private List children = new ArrayList();

// 添加孩子節點

public void addChild(Node node) {

children.add(node);

}

// 先序周遊,拼接JSON字元串

public String toString() {

String result = "{" + "id : '" + id + "'" + ", text : '" + text + "'";

if (children.size() != 0) {

result += ", children : [";

for (Iterator it = children.iterator(); it.hasNext();) {

result += ((Node) it.next()).toString() + ",";

}

result = result.substring(0, result.length() - 1);

result += "]";

} else {

result += ", leaf : true";

}

return result + "}";

}

// 兄弟節點橫向排序

public void sortChildren() {

if (children.size() != 0) {

// 對本層節點進行排序(可根據不同的排序屬性,傳入不同的比較器,這裡傳入ID比較器)

Collections.sort(children, new NodeIDComparator());

// 對每個節點的下一層節點進行排序

for (Iterator it = children.iterator(); it.hasNext();) {

((Node) it.next()).sortChildren();

}

}

}

}

class NodeIDComparator implements Comparator {

// 按照節點編号比較

public int compare(Object o1, Object o2) {

int j1 = Integer.parseInt(((Node) o1).id);

int j2 = Integer.parseInt(((Node) o2).id);

return (j1 < j2 ? -1 : (j1 == j2 ? 0 : 1));

}

}

class VirtualDataGenerator {

// 構造無序的結果集清單,實際應用中,該資料應該從資料庫中查詢獲得;

public static List getVirtualResult() {

List dataList = new ArrayList();

HashMap dataRecord1 = new HashMap();

dataRecord1.put("id", "112000");

dataRecord1.put("text", "廊坊銀行解放道支行");

dataRecord1.put("parentId", "110000");

HashMap dataRecord2 = new HashMap();

dataRecord2.put("id", "112200");

dataRecord2.put("text", "廊坊銀行三大街支行");

dataRecord2.put("parentId", "112000");

HashMap dataRecord3 = new HashMap();

dataRecord3.put("id", "112100");

dataRecord3.put("text", "廊坊銀行廣陽道支行");

dataRecord3.put("parentId", "112000");

HashMap dataRecord4 = new HashMap();

dataRecord4.put("id", "113000");

dataRecord4.put("text", "廊坊銀行開發區支行");

dataRecord4.put("parentId", "110000");

HashMap dataRecord5 = new HashMap();

dataRecord5.put("id", "100000");

dataRecord5.put("text", "廊坊銀行總行");

dataRecord5.put("parentId", "");

HashMap dataRecord6 = new HashMap();

dataRecord6.put("id", "110000");

dataRecord6.put("text", "廊坊分行");

dataRecord6.put("parentId", "100000");

HashMap dataRecord7 = new HashMap();

dataRecord7.put("id", "111000");

dataRecord7.put("text", "廊坊銀行金光道支行");

dataRecord7.put("parentId", "110000");

dataList.add(dataRecord1);

dataList.add(dataRecord2);

dataList.add(dataRecord3);

dataList.add(dataRecord4);

dataList.add(dataRecord5);

dataList.add(dataRecord6);

dataList.add(dataRecord7);

return dataList;

}

}轉自: