json权限父子包含,层层迭代

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
    }
]





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fjkxyl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值