java解析任意形式的json,树型结构展示

在开发中有些情况下,json不是id,pid这种规范的树型结构,需要自己解析。自己写一个java类解析所有格式的json,可以形成树形结构:

//解析json格式
public List<CommonTreeNode> getJsonContens(String param){
		List<CommonTreeNode> result=new ArrayList<CommonTreeNode>();
		CommonTreeNode root_node=new CommonTreeNode();
		root_node.setId("");
		root_node.setName("测试");
		root_node.setUpId(null);
		result.add(root_node);
		JSONObject obj=null;
		JsonUtils(obj,"",root_node);
		return result;
	}
//循环迭代解析json
 public List<CommonTreeNode> JsonUtils(Object json,String paramsKey,CommonTreeNode node){
		List<CommonTreeNode> result=new ArrayList<CommonTreeNode>();
		String paramkey;
		if(json instanceof JSONArray){
			JSONArray objArray = (JSONArray)json;
			for(int i=0;i<objArray.size();i++){
				paramkey=paramsKey+"?"+i;
				CommonTreeNode snode=new CommonTreeNode();
				buildChildTree(snode,paramkey,paramsKey,"icon_temple",String.valueOf(i),true);
				node.addChild(snode);
				JsonUtils(objArray.get(i),paramkey,snode);
			}
		}else if(json instanceof JSONObject){
			JSONObject jsonObject =(JSONObject)json;
			for(Map.Entry<String, Object> entry:jsonObject.entrySet()){
				paramkey=paramsKey+"?"+entry.getKey();
				Object ochild=entry.getValue();
				if(ochild instanceof JSONObject || ochild instanceof JSONArray){
					CommonTreeNode snode=new CommonTreeNode();
					buildChildTree(snode,paramkey,paramsKey,"icon_temple",entry.getKey(),true);
					node.addChild(snode);
					JsonUtils(entry.getValue(),paramkey,snode);
				}else{
					CommonTreeNode snode=new CommonTreeNode();
					buildChildTree(snode,paramkey,paramsKey,"icon_temple",entry.getKey(),true);
					
					node.addChild(snode);
				}
			}
		}
		return result;
	}
//对每一层建节点
 public void buildChildTree(CommonTreeNode snode,String paramkey,String paramsKey,String skin,String name,boolean nocheck){
		snode.setId(paramkey);
		snode.setUpId(paramsKey);
		snode.setName(name);
		snode.setOpen(false);
		snode.setNocheck(nocheck);
	}


猜你喜欢

转载自blog.csdn.net/mr2zhang/article/details/75807970