数据库查询出的扁形数据转树型结构数据

时间:2022-01-13 12:58:50

扁形数据结构
[
{id:1,pid:2,text:你好},
{id:2,pid:3,text:你好}
]
转换为树型json结构
[{
“id”:1,
“text”:”My Documents”,
“children”:[{
“id”:11,
“text”:”Photos”,
“state”:”closed”,
“children”:[{
“id”:111,
“text”:”Friend”
},{
“id”:112,
“text”:”Wife”
},{
“id”:113,
“text”:”Company”
}]
}]
只是举例数据结构的格式,与数据无关

定义树型model实体类

/** ***************************** * @作者 xFei * <p> * @创建时间 2016年8月17日下午2:15:52 * <p> * @内容摘要 树型实体类 ****************************** */
public class TreeEntity {
    private String id; //数据id
    private String pid;//父节点
    private String text;//数据neirong


    /** * id get方法 * @return id */
    public String getId()
    {
        return id;
    }
    /** * id set方法 * @param id */
    public void setId(String id)
    {
        this.id = id;
    }
    /** * pid get方法 * @return pid */
    public String getPid()
    {
        return pid;
    }
    /** * pid set方法 * @param pid */
    public void setPid(String pid)
    {
        this.pid = pid;
    }
    /** * text get方法 * @return text */
    public String getText()
    {
        return text;
    }
    /** * text set方法 * @param text */
    public void setText(String text)
    {
        this.text = text;
    }
    /* * 重写TODO */
    @Override
    public String toString()
    {
        return "TreeEntity[id=" + id + ", pid=" + pid + ", text=" + text
                + "]";
    }
}

从数据库查询到的树型数据封装到树型实体类的List中,然后将数据字符串拼接成扁形数据形式

数据拼接为扁形数据:

//数据拼接
List<TreeEntity > = jdbc.query(sql);//从数据库查询数据
StringBuffer json = new StringBuffer();
        json.append("[");
        for (TreeEntity course:treelist)
        {
                json.append("{id:'"+course.getId()+"',pid:'"+course.getPid()+"',text:'"+course.getText()+"'},");
        }
        json.deleteCharAt(json.lastIndexOf(","));
        json.append("];");//去掉最后一个逗号
        System.out.println(json.toString());//打印

拼接后的json数据格式:
[
{id:1,pid:2,text:你好},
{id:2,pid:3,text:你好}
]

将扁形json数据返回到前台,用js拼接为树形结构

//扁形数据转树型数据js方法
//data为后台返回的扁形数据json
var jsonDataTree = transData(eval(data), 'id', 'pid',
                        'children');
function transData(a, idStr, pidStr, chindrenStr)
    {
        var r = [], hash =
        {}, id = idStr, pid = pidStr, children = chindrenStr, i = 0, j = 0, len = a.length;
        for (; i < len; i++)
        {
            hash[a[i][id]] = a[i];
        }
        for (; j < len; j++)
        {
            var aVal = a[j], hashVP = hash[aVal[pid]];
            if (hashVP)
            {
                !hashVP[children] && (hashVP[children] = []);
                hashVP[children].push(aVal);
            } else
            {
                r.push(aVal);
            }
        }
        return r;
    }

转换后的树型数据格式:
[{
“id”:1,
“text”:”My Documents”,
“children”:[{
“id”:11,
“text”:”Photos”,
“state”:”closed”,
“children”:[{
“id”:111,
“text”:”Friend”
},{
“id”:112,
“text”:”Wife”
},{
“id”:113,
“text”:”Company”
}]
}]

转换后的树型数据json就可以用easyui的tree组件加载