public String merge(String source, String target){
Assert.notNull(source, "Source must not be null");
Assert.notNull(target, "Target must not be null");
Object o = JSON.parse(source);
Object p = JSON.parse(target);
if(!equalsInstanceof(o, p)){
return target;
}
if(o instanceof JSONObject){
JSONObject sourcejson = JSON.parseObject(source);
JSONObject targetjson = JSON.parseObject(target);
for (Map.Entry<String, Object> entity : sourcejson.entrySet()) {
//基本类型
if (entity.getKey().getClass().isPrimitive()) {
Object tValue = targetjson.get(entity.getKey());
if (tValue != null) {
entity.setValue(tValue);
}
} else {
Object o1 = entity.getValue();
Object o2 = targetjson.get(entity.getKey());
if(o2 != null){
String merge = merge(JSON.toJSONString(o1), JSON.toJSONString(o2));
entity.setValue(JSON.parse(merge));
}
}
//删除处理过的数据
targetjson.remove(entity.getKey());
}
sourcejson.putAll(targetjson);
return JSON.toJSONString(sourcejson);
}
if(o instanceof JSONArray){
JSONArray sourceO = JSON.parseArray(source);
JSONArray targetO = JSON.parseArray(target);
if(sourceO.isEmpty()){
return target;
}
if(targetO.size()>=sourceO.size()){
JSONArray objects = new JSONArray();
for (int i = 0; i < sourceO.size(); i++) {
Object o1 = sourceO.get(i);
Object o2 = targetO.get(i);
String merge = merge(JSON.toJSONString(o1), JSON.toJSONString(o2));
objects.add(JSON.parse(merge));
}
objects.addAll(targetO.subList(sourceO.size(), targetO.size()));
return JSON.toJSONString(objects);
}else {
for (int i = 0; i < targetO.size(); i++) {
Object o1 = sourceO.get(i);
Object o2 = targetO.get(i);
String merge = merge(JSON.toJSONString(o1), JSON.toJSONString(o2));
sourceO.set(i,JSON.parse(merge));
}
return JSON.toJSONString(sourceO);
}
}
return target;
}
private boolean equalsInstanceof(Object a,Object b){
Class<?> aClass = a.getClass();
Class<?> bClass = b.getClass();
return aClass == bClass;
}
12-04
5745
05-26
07-28