在不知道根节点的状况下生成树形结构 (采用JSONObject)

废话很少说直接上代码

/**
 *      * 生成树形结构 在不知道跟节点的状况下
 * @param list  源数据
 * @param nodeList 跟节点数据
 * @param childName 子节点名称
 * @param key 节点key
 * @param up_key 上级节点key
 * @param child_level 节点级别 1,2,3...
 * @return
 */
 public static JSONArray recursionCreateArrayNotRoot(JSONArray list, JSONArray nodeList, String childName, String key, String up_key, int child_level) {
    if (nodeList == null) {
        //跟节点为空的状况下 ,遍历查询跟节点
        nodeList = new JSONArray();//做为跟节点的存在
        for (int i = 0; i < list.size(); i++) {
            boolean mark = false;
            JSONObject n = list.getJSONObject(i);
            for (int j = 0; j < list.size(); j++) {
                JSONObject m = list.getJSONObject(j);
                if (n.optString(up_key).equals(m.optString(key))) {
                    mark = true;
                    break;
                }
            }
            if (!mark) {
                n.put("child_level", child_level);
                nodeList.add(n);//添加的是没有上级的
            }
        }
        list.removeAll(nodeList);//将根节点移除出列表
    }
    //为根节点寻找下级
    for (int i = 0; i < nodeList.size(); i++) {
        JSONObject n = nodeList.getJSONObject(i);
        JSONArray child = n.optJSONArray(childName);
        if (child == null) {
            child = new JSONArray();
        }
        for (int j = 0; j < list.size(); j++) {
            JSONObject m = list.getJSONObject(j);
            m.put("child_level", child_level + 1);
            if (n.optString(key).equals(m.optString(up_key))) {
                child.add(m);
            }
        }
        n.put(childName, child);
        list.removeAll(child);//跟节点的下级找到后移除列表
        recursionCreateArrayNotRoot(list, n.optJSONArray(childName), childName, key, up_key, child_level + 1);//不断的寻找下级
    }
    return nodeList;

}
复制代码

理论上这个方法能够通用,无论大家定义的关键字是什么均可以使用

调用方法  JSONArray result = jJson.recursionCreateArrayNotRoot(array, null, "child","org_key", "up_org_key", 1);
复制代码

原始数据

[
{
    "org_key":"2001",
    "up_org_key":"0",
    "usr_org_key":"1001",
    "usr_org_name":"光明城",
    "user_org_code":"10",
    "boss_id":"10010",
    "org_name":"光明城1",
    "org_code":"12",
    "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
    "org_level":"1",
    "area_name":"虎邱村"
},
{
    "org_key":"2002",
    "up_org_key":"2001",
    "usr_org_key":"1002",
    "usr_org_name":"晋安区",
    "user_org_code":"10-0001",
    "boss_id":"10010",
    "org_name":"晋安区",
    "org_code":"12-1",
    "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
    "org_level":"2",
    "area_name":"虎邱村"
},
{
    "org_key":"2003",
    "up_org_key":"0",
    "usr_org_key":"",
    "usr_org_name":"",
    "user_org_code":"",
    "boss_id":"10010",
    "org_name":"鼓楼区",
    "org_code":"11",
    "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
    "org_level":"1",
    "area_name":"虎邱村"
},
{
    "org_key":"org_fTZXL9Vea8mLlxVCeGEWbFr4cQHQDQhZ",
    "up_org_key":"2001",
    "usr_org_key":"org_iU57sIDvHmM6LljFPSZbgNVieVhjKyBQ",
    "usr_org_name":"福州测试小区",
    "user_org_code":"10-0003",
    "boss_id":"10010",
    "org_name":"福州测试小区",
    "org_code":"12-2",
    "area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL",
    "org_level":"2",
    "area_name":"文楼村"
},
{
    "org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm",
    "up_org_key":"2001",
    "usr_org_key":"",
    "usr_org_name":"",
    "user_org_code":"",
    "boss_id":"10010",
    "org_name":"花园小区",
    "org_code":"12-5",
    "area_key":"IfwmlJrHl6137YZ7FvmcW1QjlNYoGWkS",
    "org_level":"2",
    "area_name":"福耀社区"
},
{
    "org_key":"org_fx5fjorqBRWJgWR4CxMx3Wquq0CimhnE",
    "up_org_key":"2003",
    "usr_org_key":"org_HHsupVt4HPzfcpSZShchbLivotsVdaFK",
    "usr_org_name":"大儒世家",
    "user_org_code":"003",
    "boss_id":"10010",
    "org_name":"五凤街道",
    "org_code":"11-1",
    "area_key":"DxeRGfT5mP2tq1Yw4b7hqzDckZiL2T9W",
    "org_level":"2",
    "area_name":"福和社区"
},
{
    "org_key":"org_gG6L68Wt0zjmCxp0dIWM0XKDCToyFndZ",
    "up_org_key":"org_gG6L68Wt0zjmCxp0dIWM0XKDCToyFndZ",
    "usr_org_key":"",
    "usr_org_name":"",
    "user_org_code":"",
    "boss_id":"10010",
    "org_name":"部门A",
    "org_code":"001",
    "area_key":"vI59WqwHEDLvdyc3SI2Z0p1u8ZQl6dvl",
    "org_level":"2",
    "area_name":"柏渡村"
},
{
    "org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C",
    "up_org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm",
    "usr_org_key":"org_EdLEdVgGciifkYeRmluNawW6Tjgxq4Fu",
    "usr_org_name":"西洪小区",
    "user_org_code":"0021",
    "boss_id":"10010",
    "org_name":"区委会",
    "org_code":"12-5-1",
    "area_key":"pMhxXlafOcYeQ0vNWf3nz1tIdwvS0JdN",
    "org_level":"3",
    "area_name":"玉峰村"
},
{
    "org_key":"org_hCtV75g3cB6bBqJHarfRvKwG1YjEKwwX",
    "up_org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C",
    "usr_org_key":"",
    "usr_org_name":"",
    "user_org_code":"",
    "boss_id":"10010",
    "org_name":"某某部门",
    "org_code":"12-5-1-1",
    "area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL",
    "org_level":"4",
    "area_name":"文楼村"
}
复制代码

]node

生成后的数据

[
{
    "org_key":"2001",
    "up_org_key":"0",
    "usr_org_key":"1001",
    "usr_org_name":"光明城",
    "user_org_code":"10",
    "boss_id":"10010",
    "org_name":"光明城1",
    "org_code":"12",
    "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
    "org_level":"1",
    "area_name":"虎邱村",
    "child_level":1,
    "child":[
        {
            "org_key":"2002",
            "up_org_key":"2001",
            "usr_org_key":"1002",
            "usr_org_name":"晋安区",
            "user_org_code":"10-0001",
            "boss_id":"10010",
            "org_name":"晋安区",
            "org_code":"12-1",
            "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
            "org_level":"2",
            "area_name":"虎邱村",
            "child_level":2,
            "child":[

            ]
        },
        {
            "org_key":"org_fTZXL9Vea8mLlxVCeGEWbFr4cQHQDQhZ",
            "up_org_key":"2001",
            "usr_org_key":"org_iU57sIDvHmM6LljFPSZbgNVieVhjKyBQ",
            "usr_org_name":"福州测试小区",
            "user_org_code":"10-0003",
            "boss_id":"10010",
            "org_name":"福州测试小区",
            "org_code":"12-2",
            "area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL",
            "org_level":"2",
            "area_name":"文楼村",
            "child_level":2,
            "child":[

            ]
        },
        {
            "org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm",
            "up_org_key":"2001",
            "usr_org_key":"",
            "usr_org_name":"",
            "user_org_code":"",
            "boss_id":"10010",
            "org_name":"花园小区",
            "org_code":"12-5",
            "area_key":"IfwmlJrHl6137YZ7FvmcW1QjlNYoGWkS",
            "org_level":"2",
            "area_name":"福耀社区",
            "child_level":2,
            "child":[
                {
                    "org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C",
                    "up_org_key":"org_7I7UNQloRMuZBC6RQlp6gZf9KDgiI3hm",
                    "usr_org_key":"org_EdLEdVgGciifkYeRmluNawW6Tjgxq4Fu",
                    "usr_org_name":"西洪小区",
                    "user_org_code":"0021",
                    "boss_id":"10010",
                    "org_name":"区委会",
                    "org_code":"12-5-1",
                    "area_key":"pMhxXlafOcYeQ0vNWf3nz1tIdwvS0JdN",
                    "org_level":"3",
                    "area_name":"玉峰村",
                    "child_level":3,
                    "child":[
                        {
                            "org_key":"org_hCtV75g3cB6bBqJHarfRvKwG1YjEKwwX",
                            "up_org_key":"org_IXGMspHF6FZFrhZEWJGQpijR1hH0aQ1C",
                            "usr_org_key":"",
                            "usr_org_name":"",
                            "user_org_code":"",
                            "boss_id":"10010",
                            "org_name":"某某部门",
                            "org_code":"12-5-1-1",
                            "area_key":"U7okhSHxC8Vs1c3YXxQleRiiIYelvmdL",
                            "org_level":"4",
                            "area_name":"文楼村",
                            "child_level":4,
                            "child":[

                            ]
                        }
                    ]
                }
            ]
        }
    ]
},
{
    "org_key":"2003",
    "up_org_key":"0",
    "usr_org_key":"",
    "usr_org_name":"",
    "user_org_code":"",
    "boss_id":"10010",
    "org_name":"鼓楼区",
    "org_code":"11",
    "area_key":"qBkXGHYS6H2r3l8hQsOWOC8C12kMeEHw",
    "org_level":"1",
    "area_name":"虎邱村",
    "child_level":1,
    "child":[
        {
            "org_key":"org_fx5fjorqBRWJgWR4CxMx3Wquq0CimhnE",
            "up_org_key":"2003",
            "usr_org_key":"org_HHsupVt4HPzfcpSZShchbLivotsVdaFK",
            "usr_org_name":"大儒世家",
            "user_org_code":"003",
            "boss_id":"10010",
            "org_name":"五凤街道",
            "org_code":"11-1",
            "area_key":"DxeRGfT5mP2tq1Yw4b7hqzDckZiL2T9W",
            "org_level":"2",
            "area_name":"福和社区",
            "child_level":2,
            "child":[

            ]
        }
    ]
}
复制代码

]测试

相关文章
相关标签/搜索