/**
* * 生成樹形結構 在不知道跟節點的狀況下
* @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":[
]
}
]
}
複製代碼
]測試