1、json解析的jar是阿里的fastjson
2、模拟数据
private static List<Node> getNodes(){
List<Node> nodes = new ArrayList<Node>();
Node node1 = new Node();
node1.setId(1);
node1.setName("node1");
node1.setParentId(0);
node1.setLink(null);
nodes.add(node1);
Node node11 = new Node();
node11.setId(11);
node11.setName("node11");
node11.setParentId(1);
node11.setLink(null);
nodes.add(node11);
Node node111 = new Node();
node111.setId(111);
node111.setName("node111");
node111.setParentId(11);
node111.setLink(null);
nodes.add(node111);
Node node1111 = new Node();
node1111.setId(1111);
node1111.setName("node1111");
node1111.setParentId(111);
node1111.setLink(null);
nodes.add(node1111);
Node node12 = new Node();
node12.setId(12);
node12.setName("node12");
node12.setParentId(1);
node12.setLink(null);
nodes.add(node12);
Node node2 = new Node();
node2.setId(2);
node2.setName("node2");
node2.setParentId(0);
node2.setLink(null);
nodes.add(node2);
Node node21 = new Node();
node21.setId(21);
node21.setName("node21");
node21.setParentId(2);
node21.setLink(null);
nodes.add(node21);
Node node3 = new Node();
node3.setId(3);
node3.setName("node3");
node3.setParentId(0);
node3.setLink(null);
nodes.add(node3);
return nodes;
}
3、创建json树
private static String createTreeJson(List<Node> list) {
JSONArray rootArray = new JSONArray();
for (int i=0; i<list.size(); i++) {
Node resource = list.get(i);
if (resource.getParentId() == 0) {
//创建子节点分支
JSONObject rootObj = createBranch(list, resource);
rootArray.add(rootObj);
}
}
return rootArray.toString();
}
private static JSONObject createBranch(List<Node> list, Node currentNode) {
JSONObject currentObj = (JSONObject) JSONObject.toJSON(currentNode);
JSONArray childArray = new JSONArray();
for (int i=0; i<list.size(); i++) {
Node newNode = list.get(i);
if (newNode.getParentId()!=null && newNode.getParentId().compareTo(currentNode.getId()) == 0) {
JSONObject childObj = createBranch(list, newNode);
childArray.add(childObj);
}
}
if (!childArray.isEmpty()) {
currentObj.put("children", childArray);
}
return currentObj;
}
4、返回结果
[
{
"children": [
{
"children": [
{
"children": [
{
"name": "node1111",
"id": 1111,
"parentId": 111
}
],
"name": "node111",
"id": 111,
"parentId": 11
}
],
"name": "node11",
"id": 11,
"parentId": 1
},
{
"name": "node12",
"id": 12,
"parentId": 1
}
],
"name": "node1",
"id": 1,
"parentId": 0
},
{
"children": [
{
"name": "node21",
"id": 21,
"parentId": 2
}
],
"name": "node2",
"id": 2,
"parentId": 0
},
{
"name": "node3",
"id": 3,
"parentId": 0
}
]