jsonobject - java json 合并
本文介绍了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屋!
查看全文