JsonMerge

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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值