好贷网好贷款

以目录形式存树结构,用json lib拼接,用easyui显示(例子)

发布时间:2016-12-4 18:24:58 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"以目录形式存树结构,用json lib拼接,用easyui显示(例子)",主要涉及到以目录形式存树结构,用json lib拼接,用easyui显示(例子)方面的内容,对于以目录形式存树结构,用json lib拼接,用easyui显示(例子)感兴趣的同学可以参考一下。

从网上找的资料来看,目前保存树的有三种方法:1.子节点保存父节点编号。2.用数字形式,例如10是个节点,那么1000-1099都是子节点,同理100000-100099都是1000的子节点。3.用目录格式来保存。 因为确定使用easyui的树形结构,而且项目中已经引入了json lib,所以综合目录格式的清晰来考虑决定用目录格式。 遇到的最大的问题是JSONArray和JSONObject,开始没有对json很深入的了解,花了比较多的时间去转化,但是发现了个问题。 先看一段代码: import java.util.*; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class MultipleTree { public static void main(String[] args) { JSONArray result = new JSONArray(); JSONObject temp_for_add = new JSONObject(); temp_for_add.put("text", "aaa"); temp_for_add.put("children", new JSONArray()); JSONObject temp = new JSONObject(); temp.put("test1", "test1_data"); temp_for_add.getJSONArray("children").add(temp); result.add(temp_for_add);//注意这句话 System.out.println(result.toString()); } } 打印结果是 [{"text":"aaa","children":[{"test1":"test1_data"}]}] 第二段代码: import java.util.*; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class MultipleTree { public static void main(String[] args) { JSONArray result = new JSONArray(); JSONObject temp_for_add = new JSONObject(); temp_for_add.put("text", "aaa"); temp_for_add.put("children", new JSONArray()); result.add(temp_for_add);//注意这句话 JSONObject temp = new JSONObject(); temp.put("test1", "test1_data"); temp_for_add.getJSONArray("children").add(temp); System.out.println(result.toString()); } }打印结果是:[{"text":"aaa","children":[]}] 可以看到在add之后对被加入的JSONObject对象put就似乎没有作用了,暂时还是不明白为什么会出现这样的情况,由于是从根节点往下加的,所以考虑放弃先ADD再put,要将顺序反过来就用了递归。 import java.util.*; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class MultipleTree { static JSONArray makeMultipleTree(String[] mm, JSONArray result, int i){ JSONObject temp_for_add = new JSONObject(); int flag = -1;//如果处理后是-1说明没有相同的节点 for(int ii =0; ii<result.size(); ii++ ) { if(result.getJSONObject(ii).containsValue(mm[i])){ flag = ii;//如果处理后是ii,就说明m[ii]已经有了 } } JSONArray temp; if(flag==-1){//如果节点未添加,就添加 temp_for_add.put("text", mm[i]);//注意这句话 temp_for_add.put("children", new JSONArray());//注意这句话 if(i >= mm.length-1){ result.add(temp_for_add); return result; } temp = makeMultipleTree(mm, temp_for_add.getJSONArray("children"), ++i); result.add(temp_for_add);//注意这句话 }else{//如果节点已添加,就接下去算 temp = makeMultipleTree(mm, result.getJSONObject(flag).getJSONArray("children"), ++i); } return temp; } public static void main(String[] args) { String data1 = "result/go/hi"; String data2 = "result/go/hi/kk"; String data3 = "result/go/dd"; String data4 = "result/aa/hi"; String data5 = "result/dd/hi"; String data6 = "result/ff/gg/eek"; String[] array = data1.split("/"); JSONArray result = new JSONArray(); makeMultipleTree(array, result, 0); array = data2.split("/"); makeMultipleTree(array, result, 0); array = data3.split("/"); makeMultipleTree(array, result, 0); array = data4.split("/"); makeMultipleTree(array, result, 0); array = data5.split("/"); makeMultipleTree(array, result, 0); array = data6.split("/"); makeMultipleTree(array, result, 0); System.out.println(result.toString()); } }可以看到因为递归所以put可以放在ADD之前,因此makeMultipleTree可以用。 打印结果是[{"text":"result","children":[{"text":"go","children":[{"text":"hi","children":[{"text":"kk","children":[]}]},{"text":"dd","children":[]}]},{"text":"aa","children":[{"text":"hi","children":[]}]},{"text":"dd","children":[{"text":"hi","children":[]}]},{"text":"ff","children":[{"text":"gg","children":[{"text":"eek","children":[]}]}]}]}] 可以直接用于easyui的tree控件,效果为:

上一篇:16则极具内涵的程序员笑话
下一篇:程序员之歌

相关文章

相关评论