java 删除树节点 ,树以json形式存储(备忘)
importnet.sf.json.JSONArray;
import net.sf.json.JSONObject;public class Test {
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
StringjsonStr="{\"id\":\"0\",\"text\":\"我的收藏\",\"cls\":\"folder\",\"children\":[{\"id\":\"27260236332789670000\",\"text\":\"we\",\"cls\":\"folder\",\"children\":[{\"id\":\"27264047306094694000\",\"text\":\"asd\",\"leaf\":true}]},{\"id\":\"4315427192432198700\",\"text\":\"模块管理\",\"leaf\":true}]}";
JSONObjectoldObj=JSONObject.fromObject(jsonStr);
Stringremovedid="27264047306094694000";
Testt=newTest();
JSONObjectnewObj=t.removeJSONObject(oldObj,removedId);
System.out.println(newObj);
}
/**
*根据id删除JSONObject对象
*@paramoldJsonObj
*@paramremovedJsonId
*@return
*/
publicJSONObjectremoveJSONObject(JSONObjectoldJsonObj,StringremovedJsonId){
JSONObjectnewJsonObj=null;
if(oldJsonObj==null){
returnnull;
}
//获取要删除的JSONObject
JSONObjectremoveObj=this.getRemovedJSONObject(oldJsonObj,removedJsonId);
if(removeObj==null){
returnoldJsonObj;
}
StringoldJsonObjStr=oldJsonObj.toString();
String removeObjStr = removeObj.toString();//将原有JSONObject字符串中删除查询到的JSONObject字符串
StringnewJsonObjStr=oldJsonObjStr.replace(removeObjStr+",","");
newJsonObjStr=newJsonObjStr.replace(removeObjStr,"");
if(newJsonObjStr==null){
returnnull;
}
//重新获取删除后的JSONObject
newJsonObj=JSONObject.fromObject(newJsonObjStr);
returnnewJsonObj;
}
/**
*获取要删除的JSONObject
*@paramjsonObj
*@paramremovedId
*@return
*/
privateJSONObjectgetRemovedJSONObject(JSONObjectjsonObj,StringremovedId){
JSONObjectremoveObj=null;
//获取id
StringnodeId=jsonObj.getString("id");
if(removedId.equals(nodeId)){
returnjsonObj;
}else{
if(!jsonObj.containsKey("children")){
returnnull;
}
//查询该JSONObject中的子节点
JSONArraysubJsonArr=(JSONArray)jsonObj.get("children");
if(subJsonArr==null||subJsonArr.size()==0){
returnnull;
}
for(Objectobj:subJsonArr){
//继续递归查询
removeObj=this.getRemovedJSONObject((JSONObject)obj,removedId);
if(removeObj!=null){
break;
}
}
}
returnremoveObj;
}}