生成EasyUI Tree所需的Json数据格式
来源:互联网 发布:java数组最大长度限制 编辑:程序博客网 时间:2024/06/03 17:41
用过JQuery EasyUI的朋友都知道,构造树型目录结构(tree)需要指定格式的Json数据,形如:
而我们得到的往往是类似zTree那种扁平化的数据,形如:
折腾了一天,终于把下面这种格式的数据转化为上面那种easyui tree所需要的数据,刚开始网上找了一些答案,发现都不能满足我的需要,于是参照网上别人用javascript实现的代码,我用java按照类似思想,重新实现了一下,从而满足了自己的需要!
javascript代码实现如下:
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>easyui treegrid json格式生成</title> <script src="Scripts/jquery-1.7.1.min.js"></script> <script type="text/javascript"> /*将一般的JSON格式转为EasyUI TreeGrid树控件的JSON格式 * @param rows:json数据对象 * @param idFieldName:表id的字段名 * @param pidFieldName:表父级id的字段名 * @param fileds:要显示的字段,多个字段用逗号分隔 */ function ConvertToTreeGridJson(rows, idFieldName, pidFieldName, fileds) { function exists(rows, ParentId) { for (var i = 0; i < rows.length; i++) { if (rows[i][idFieldName] == ParentId) return true; } return false; } var nodes = []; // get the top level nodes for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (!exists(rows, row[pidFieldName])) { var data = { id: row[idFieldName] } var arrFiled = fileds.split(","); for (var j = 0; j < arrFiled.length; j++) { if (arrFiled[j] != idFieldName) data[arrFiled[j]] = row[arrFiled[j]]; } nodes.push(data); } } console.info("根目录nodes:"+JSON.stringify(nodes)); var toDo = []; for (var i = 0; i < nodes.length; i++) { toDo.push(nodes[i]); } while (toDo.length) { var node = toDo.shift(); // the parent node // get the children nodes for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (row[pidFieldName] == node.id) { var child = { id: row[idFieldName] }; var arrFiled = fileds.split(","); for (var j = 0; j < arrFiled.length; j++) { if (arrFiled[j] != idFieldName) { child[arrFiled[j]] = row[arrFiled[j]]; } } if (node.children) { node.children.push(child); } else { node.children = [child]; } toDo.push(child); } } } return nodes; }; $(function () { //假设这是从后台获取到的json数据 var dataJsonObj = [{ 'Id': 1, 'ParentId': 0, 'Title': '猫分类', 'CreateTime': '2015/06/04 01:05:32' }, { 'Id': 2, 'ParentId': 1, 'Title': '田园猫', 'CreateTime': '2015/06/04 01:11:30' }, { 'Id': 3, 'ParentId': 0, 'Title': '英国短毛猫', 'CreateTime': '2015/06/04 01:11:51' }, { 'Id': 4, 'ParentId': 3, 'Title': '布偶猫', 'CreateTime': '2015/06/04 01:12:05' },{ 'Id': 5, 'ParentId': 4, 'Title': '布偶猫2', 'CreateTime': '2015/06/04 01:12:05' }]; //要显示的字段 var fileds = "Id,Title,CreateTime"; //获取已转为符合treegrid的json的对象 var nodes = ConvertToTreeGridJson(dataJsonObj, "Id", "ParentId", fileds); // $("#divResult").html(JSON.stringify(nodes)); }); </script></head><body> <div id="divResult"></div></body></html>
输出效果如下:
[ { "id": 1, "Title": "猫分类", "CreateTime": "2015/06/04 01:05:32", "children": [ { "id": 2, "Title": "田园猫", "CreateTime": "2015/06/04 01:11:30" } ] }, { "id": 3, "Title": "英国短毛猫", "CreateTime": "2015/06/04 01:11:51", "children": [ { "id": 4, "Title": "布偶猫", "CreateTime": "2015/06/04 01:12:05", "children": [ { "id": 5, "Title": "布偶猫2", "CreateTime": "2015/06/04 01:12:05" } ] } ] }]
我通过这种思路,用java实现代码如下:
/** * * @param rows * @return */ public static String getTreeJsonData(List<FlatData> rows) { // 得到顶层节点 ArrayList<Bean2> nodes = new ArrayList<Bean2>(); for (int i = 0; i < rows.size(); i++) { FlatData row = rows.get(i); if (!exists(rows, row.getPid())) { Bean2 b = new Bean2(); b.setId(row.getId()); b.setText(row.getId()); nodes.add(b); } } ArrayList<Bean2> toDo = new ArrayList<Bean2>(); for (Bean2 bean2 : nodes) { toDo.add(bean2); } // 得到子节点 while (toDo.size() > 0) { Bean2 node = toDo.remove(0); for (int i = 0; i < rows.size(); i++) { FlatData row = rows.get(i); ArrayList<Bean2> childList = new ArrayList<Bean2>(); if (row.getPid().equals(node.getId())) { Bean2 b = new Bean2(); b.setId(row.getId()); b.setText(row.getId()); if (node.getChildren() != null) { node.getChildren().add(b); } else { childList.add(b); node.setChildren(childList); } toDo.add(b); } } } return JSONArray.fromObject(nodes).toString(); }
输出效果如下:
[ { "children": [ { "children": [], "id": "D:\\ShuYun\\mocktool\\mockserver\\api\\logistics\\taobao.logistics.address.search.json", "text": "D:\\ShuYun\\mocktool\\mockserver\\api\\logistics\\taobao.logistics.address.search.json" }, { "children": [ { "children": [], "id": "D:\\ShuYun\\mocktool\\mockserver\\api\\logistics\\新建文件夹\\abc中一.json", "text": "D:\\ShuYun\\mocktool\\mockserver\\api\\logistics\\新建文件夹\\abc中一.json" } ], "id": "D:\\ShuYun\\mocktool\\mockserver\\api\\logistics\\新建文件夹", "text": "D:\\ShuYun\\mocktool\\mockserver\\api\\logistics\\新建文件夹" } ], "id": "D:\\ShuYun\\mocktool\\mockserver\\api\\logistics", "text": "D:\\ShuYun\\mocktool\\mockserver\\api\\logistics" }]
其中java代码借助了Json_lib及其所需要的jar包,通过javaBean配合完成。
最后展示一下我的成果:
0 0
- 生成EasyUI Tree所需的Json数据格式
- C#将datatable生成easyui的绑定tree 的json数据格式
- C#将datatable生成easyui的绑定tree 的json数据格式
- C#将datatable生成easyui的绑定tree 的json数据格式
- easyui tree 的数据格式转换
- easyUI tree数据格式的转换
- .net 生成 easyui tree树的json
- 生成符合EasyUI-Tree的JSON数据
- Asp.net生成Extjs-Tree数据格式的json类
- easyui tree 的异步加载 前台的编写方法和后台的json数据格式组装方法
- easyui tree 实现类似ztree的数据格式
- php生成easyUI Tree要用到的json格式
- easyui+.net mvc(tree数据格式)
- C#生成JSON数据格式的函数
- easyui加载datagrid和treegrid的几种json数据格式
- easyui加载datagrid和treegrid的几种json数据格式
- Json数据格式基本生成
- 不同Json api生成json数据格式的区别
- ios 客户端校准标准时间
- mysql 转义
- Android SDK Version简介
- 文章标题
- Java单链表、双端链表、有序链表实现原理
- 生成EasyUI Tree所需的Json数据格式
- css样式表
- 又见01背包。(另类的01背包问题)
- C#窗体鼠标事件区分单击双击
- Python线性回归学习笔记
- 七牛、阿里云、金山云、腾讯云直播调研
- 使用Android Studio半年来遇到的一些问题解决方案总结
- linux中shell脚本设置环境变量
- ListView和ArrayAdapter、SimpleAdapter适配器的简单使用