jsonobject - java json 合并

查看:133
本文介绍了jsonobject - java json 合并的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

现有两段json
第一段

{ "sheets": {
        "Sheet1": {
            "name": "Sheet1",
            "data": {
                "dataTable": {
                    "0": {
                        "0": {
                            "value": 1,
                            "style": {
                                "autoFormatter": {}
                            }
                        }
                    }
                }
            }
        }
    }
}

第二段

{
    "sheets":{
        "Sheet1":{
            "name":"Sheet1",
            "activeRow":1,
            "data":{
                "dataTable":{
                    "0":{
                        "0":{
                            "value":11,
                            "style":{
                                "autoFormatter":{

                                }
                            }
                        }
                    },
                    "1":{
                        "0":{
                            "value":2,
                            "style":{
                                "autoFormatter":{

                                }
                            }
                        }
                    }
                }
            }
        },
        "Sheet2":{
            "name":"Sheet2",
            "activeRow":2,
            "data":{
                "dataTable":{
                    "0":{
                        "0":{
                            "value":1,
                            "style":{
                                "autoFormatter":{

                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

在第一段的基础上把第二段合并进去,生成新的json,发生变化的更行,没有的增加,有什么好办法吗

解决方案

首先,你应该把后端骂一顿,怎么返回这么垃圾的JSON结构,多余的嵌套,无用的命名,还有连JSONArray都不会用?

这个要解析只能遍历并合并同名对象或添加不同对象

Set<String> = obj2.keySet();
JSONObject child2;
JSONObject child1;
for(String key : set) {
  child2 = obj2.getJSONObject(key);
  child1 = obj1.getJSONObject(key);
  if (child1 == null) {
     //第二段内出现在第一段内不存在的JSONObject就用put添加
     obj1.put(key, child2);
  } else {
     //第二段内出现在第一段内存在的JSONObject就用putAll合并
     child1.putAll(child2);
  }
}

其实这样还不够,只能合并一层,还得通过递归来实现任意层级的合并,将以上代码段放到

JSONObject combine(JSONObject obj1, JSONObject obj2) {
  if (obj2 == null || obj2.isEmpty()) {
    return obj1;
  }
  if (obj1 == null) {
    obj1 = new JSONObject();
  }
  
  //TODO 这里放以上代码段

  return obj1;
}

函数中,然后在 child1 == null 成立时,

obj1.put(key, child2); 

改为

obj1.put(key, combine(child1, child2)); 

其实还不够,因为不只有JSONObject,所以

child2 = obj2.getJSONObject(key);

要改为

Object o = obj2.get(key);
if (o instanceof JSONObject == false) {
  continue;
}
child2 = (JSONObject) o;

其它同样。

为了直观,有些地方没判空,建议在写完整体逻辑后加上类似以下这种

if (obj2 == null) {
  return null;
}

PS:纯手打,某些单词可能拼错,勿怪。
如果你受够了垃圾后端,可以看看这个
https://github.com/TommyLemon...

这篇关于jsonobject - java json 合并的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆