在不知道根節點的狀況下生成樹形結構 (採用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":[

            ]
        }
    ]
}
複製代碼

]測試

相關文章
相關標籤/搜索