海露-XShell.CN

工具类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**
* @author hailou
* @Description JSON增加节点或者删除指定key的值
* @Date on 2020/9/18 11:09
*/

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class JsonAddOrRemoveUtils {
public static JSONObject addOrRemoveNodeByKeys(String json,String[] removeKeys, Map<String,Object> addNodes) {
JSONObject objTem=JSON.parseObject(json);
JSONObject objRel=JSON.parseObject(json);
return dealOrCreate(objTem,objRel,removeKeys,addNodes);
}
private static JSONObject dealOrCreate(JSONObject objTem, JSONObject objRel, String[] removeKeys, Map<String,Object> addNodes) {
/**
下面这段代码是批量增加节点时从当前的某个节点获取一个值塞进去
如:addNodes.put("key1","type");type就是当明节点的的一个key
把当前的key的值付给自定义节点的值,可能会做页面映射用
*/
/*if(null != addNodes && !addNodes.keySet().isEmpty()){
Set<String> keys = addNodes.keySet();
Iterator<String> iteratorKeys = keys.iterator();
while(iteratorKeys.hasNext()) {
String key = iteratorKeys.next();
if(objTem.get(addNodes.get(key))!=null){
objRel.put(key,objTem.get(addNodes.get(key)));
}
}
}*/

/**
* 这个就是把自定义节点插入进去,和上面代码取其一
*/
if(null != addNodes && !addNodes.keySet().isEmpty()){
objRel.putAll(addNodes);
}

Set<String> keySet = objTem.keySet();
Iterator<String> iterator = keySet.iterator();
while(iterator.hasNext()) {
String temp = iterator.next();//存key
Object objR = objTem.get(temp);//存value
for (int i = 0; i<removeKeys.length ; i++) {
if(removeKeys[i].equals(temp)) {
objRel.remove(temp);
continue;
}
}
if(objR instanceof JSONObject) {
JSONObject j=(JSONObject)objR;
JSONObject object2 = (JSONObject)objRel.get(temp);
dealOrCreate(j,object2,removeKeys,addNodes);
continue;
}
if(objR instanceof JSONArray) {
JSONArray jsonArray = objTem.getJSONArray(temp);
JSONArray jsonArray2 = objRel.getJSONArray(temp);
for(int i=0;i<jsonArray.size();i++) {
dealOrCreate(jsonArray.getJSONObject(i),jsonArray2.getJSONObject(i),removeKeys,addNodes);
}
}
}
return objRel;
}
}
测试
1
2
3
4
5
6
7
8
9
10
11
//原始json,注意这里的json只是对象开头的,如果是[]开头的会报错
String json = "{\"aa\":[{\"name\":\"aaa\",\"type\":\"list\",\"parentId\":\"0\",\"seat\":\"1\",\"children\":[{\"name\":\"bbb\",\"type\":\"base\",\"parentId\":\"1\",\"seat\":\"1-1\",\"children\":[]},{\"name\":\"ccc\",\"type\":\"base\",\"parentId\":\"1\",\"seat\":\"1-2\",\"children\":[]}]},{\"name\":\"ddd\",\"type\":\"map\",\"parentId\":\"0\",\"seat\":\"2\",\"children\":[{\"name\":\"eee\",\"type\":\"base\",\"parentId\":\"2\",\"seat\":\"2-1\",\"children\":[]},{\"name\":\"fff\",\"type\":\"map\",\"parentId\":\"2\",\"seat\":\"2-3\",\"children\":[{\"name\":\"ggg\",\"type\":\"base\",\"parentId\":\"2-3\",\"seat\":\"2-3-1\",\"children\":[]}]}]}]}";
System.out.println("json = " + json);
//要删除的节点
String[] removeNames = {"seat","parentId"};
//调用删除方法
Map<String,Object> addNodes = new HashMap<>();
addNodes.put("key1","key1-value");
addNodes.put("key2","key2-value");
JSONObject node = JsonAddOrRemoveUtils.addOrRemoveNodeByKeys(jsonOutput,removeNodeNames,addNodes);
System.out.println("jsonOutput = " + node);

如果对您有帮助,请作者喝杯LK:

 评论


博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Material X 作为主题 , 总访问量为 次 。
字数统计:17.9k 载入天数...载入时分秒...