1.导入json相关的jar包
2.JsonTreeHelper.java
3.调用getTreeJsonStr方法:
nodesNameBySeq:待分组的节点名称.将树节点对应的实体类的成员名称放到此数组里面,顺序是{"根节点","子节点1","子节点2"...}
data:数据列表,List<实体类> data ;
编写原理:
1).首先用groupByNodeName将数据分组
用Java中的Field进行字段比较,来获得相对应的成员字段,以及成员变量的名称,这里要用getDeclaredFields方法来获得,否则,private声明的成员是无法得到Field的
将得到的fieldIndex全部放到数组中保存,便于以后的使用,field[fieldIndex]可以得到相应的字段
2).构造一个tree的json形式的类:里面有几个重要的成员:{id,text,state}这种形式用JsonObject.fromObject(jsonObj}能直接转换为tree所需要的json,并且,这个类中要有一
个children字段,保存子节点的数据
3).recursiveTree方法
# 此方法内要递归遍历树,返回一个list,list中是一个JsonTreeObj自定义的一个类,其中的children还可以保存一个JsonTreeObj,这样就可以实现嵌套
#在递归之前,首先要有一个成员变量(全局变量)来记录要分组的节点索引
先进行一次分组,得到的map就是JsonTreeObj,通过构造方法可以实现转换,这样,转换过来的JsonTreeObj才是我们的Tree-json,但这只是一次调用
是否再次分组,要用事先准备好的 fieldIndex长度或者nodesNameBySeq进行判断,如果要继续分组,那么需要移除map中每条数据中的list并重新分组成map.
即:用新分组的List替换以前未分组的List
返回之后,返回分组好的JsonTreeObj数据,此时的list差不多和需要的json相仿但是,还要做下字符串的调整
4).replaceText
用此方法来替换最深层节点的文本,否则字段中无text,会出现undefine
4.示例
1)要构造的树
2)要构造的json
[
{
"children": [
{
"children": [
{
"children": [
{
"address": "bj",
"text": "id1",
"name": "wang'ao1",
"occupation": "student"
}
],
"id": "0.5715806450144063",
"state": "closed",
"text": "student"
}
],
"id": "0.4010186645348438",
"state": "closed",
"text": "bj"
},
{
"children": [
{
"children": [
{
"address": "bj11",
"text": "id12",
"name": "wang'ao1",
"occupation": "student"
}
],
"id": "0.188373241944635",
"state": "closed",