JAVA使用jackson自带方法比对两个json串是否一样(支持对象嵌套)

 

没有的话就引入依赖

  <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.1</version>
        </dependency>

 

 这种方式忽略顺序 ,顺序不一样 ,内容一样,也会返回true

复制代码
/**
     * 比较两个json串是否相同
     * @param currJson 当前json
     * @param oldJson 旧的json
     * @return  true 表示一样,false表示不一样,默认返回 false
     */
    public static boolean checkJsonModify(String currJson, String oldJson) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            JsonNode jsonNode1 = objectMapper.readTree(currJson);
            JsonNode jsonNode2 = objectMapper.readTree(oldJson);
            boolean equals = jsonNode1.equals(jsonNode2);
            return equals;
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return false;
    }
复制代码

 

 

自定义比较器

JsonComparator.java

复制代码
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.NumericNode;
import com.fasterxml.jackson.databind.node.TextNode;

import java.util.Comparator;

public class JsonComparator implements Comparator<JsonNode> {
    @Override
    public int compare(JsonNode o1, JsonNode o2) {
        if (o1.equals(o2)) {
            return 0;
        }
        if ((o1 instanceof TextNode) && (o2 instanceof TextNode)) {
            //字符串类型
            String s1 = o1.asText();
            String s2 = o2.asText();
            //忽略大小写
            if (s1.equalsIgnoreCase(s2)) {
                return 0;
            }
        }

        if ((o1 instanceof NumericNode) && (o2 instanceof NumericNode)){
            //数字类型
            Double d1 = o1.asDouble();
            Double d2 = o2.asDouble();
            if (d1.compareTo(d2) == 0) {
                return 0;
            }
        }
        return 1;
    }
}
复制代码

 

 

使用方式

JsonComparator jsonComparator=new JsonComparator();
System.out.println(jsonNode1.equals(jsonComparator,jsonNode2));//true

 

posted @   yvioo  阅读(517)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-03-23 POI导出excel报错:The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook
点击右上角即可分享
微信分享提示