java如何生成一个无限制 json 树

假如数据库表结构是 id,pid这种表结构类型 

 


	
	@Test
	public void testJsonTree(){
		List<Map> selectAll = buildData();
		Map linkMap=new LinkedHashMap<>();
		 List linkList=new LinkedList<>();
		for (Map entity : selectAll) {
			Integer id=(Integer) entity.get("id");
				linkMap.put(id, entity);
		}
		
		int size=selectAll.size();
		
		for (int i=0;i<size;i++) {
			Map entity=selectAll.get(i);
			Integer pid = (Integer) entity.get("pid");
			Map parentMap = (Map) linkMap.get(pid);
			if(parentMap!=null){
				List childList = (List) parentMap.get("child");
				if(childList!=null){
					childList.add(entity);
				}else{
					ArrayList<Object> arrayList = new ArrayList<>();
					arrayList.add(entity);
					parentMap.put("child", arrayList);
				}
			}else{
				linkList.add(entity);
			}
		}
		
		System.out.println(JSON.toJSONString(linkList));
	}

	private List<Map> buildData() {
		List linkList=new LinkedList<>();
		Map data1=new LinkedHashMap<>();
		data1.put("id", 1);
		data1.put("pid", 0);
		data1.put("name", "t1");
		linkList.add(data1);
		
		data1=new LinkedHashMap<>();
		data1.put("id", 2);
		data1.put("pid", 0);
		data1.put("name", "t2");
		linkList.add(data1);
		
		data1=new LinkedHashMap<>();
		data1.put("id", 3);
		data1.put("pid", 1);
		data1.put("name", "t11");
		linkList.add(data1);
		
		data1=new LinkedHashMap<>();
		data1.put("id", 4);
		data1.put("pid", 3);
		data1.put("name", "t111");
		linkList.add(data1);
		
		
		
		return linkList;
	}

输出结果

[{"id":1,"pid":0,"name":"t1","child":[{"id":3,"pid":1,"name":"t11","child":[{"id":4,"pid":3,"name":"t111"}]}]},{"id":2,"pid":0,"name":"t2"}]

 

格式化:

 

170246_dqME_3025651.png

 

转载于:https://my.oschina.net/u/3025651/blog/1498904

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值