Json串排序(随文附带一个json串排序和对比的小工具)
最近遇到个很烦人的问题。我现在做的业务有一部分是把之前app服务端的.net接口转译java接口。但是有些之前的接口,一个接口干上十几件事情,返回的json串长达五六几百行。着实看的就让人头大。但是如果返回的json串和原来的对不上,那app客户端就无法正常显示,人工去对比那是耗时耗力。所以我就想找一个程序,能把json串格式化好,然后按字段名称排好序,在逐行进行对比,就能很快就能找出不同比人工要快无数倍。找了半天也没法发现合适的。于是只好自己写一个。这个工具主要的思路是,将json串格式化并根据key值排好序,理论上相同的字段都排在相同的位置,然后根据这个去逐行进行比较,如果不相同就标为红色。如果相同就不变,试用了下,效果还不错,所以拿出来分享,希望大家都不用加班。哈哈
其中遇到一个坑fastjson 中带的字段排序总不能很好的解决我的问题,排序总有问题。所以我就自己写了一段方法进行排序。
private MapsortField(Map map){ //new 一个排序的Map 在构造方法中传入比较器 Map treeMap = new TreeMap<>(new MapComparator()); for (Map.Entry entry : map.entrySet()){ Object value = entry.getValue(); //去掉空和空字符串 if (value == null || (value instanceof String && StringUtils.isBlank((String) value))){ continue; } //判断是不是 JSONObject 如果是转化成TreeMap if (value instanceof JSONObject){ //JSONObject 覆写了toString 所有可以直接调用toString treeMap.put(entry.getKey(), sortField(JSON.parseObject(value.toString(), Map.class))); //判断是不是 JSONArray }else if (value instanceof JSONArray){ //如果是 强转成 JSONArray 并且遍历它 JSONArray jsonArray = (JSONArray) value; List
class MapComparator implements Comparator{ @Override public int compare(String str1, String str2) { return str1.compareTo(str2); } }
class ListComparator implements Comparator
该方法接受一个由json串转化成的map。
MaptreeMap = sortField(JSON.parseObject(json, Map.class));
这样调用即可。
下面是这个小工具的github地址,如果有需要的可以下来用用。主要是对json串排序,然后逐行比较
https://github.com/RaidenXin/json-comparator
也可以直接下载,在装有java环境的机器上可执行的jar包 升级版 0.0.3
https://files.cnblogs.com/files/Raiden-xin/json_comparator_jar.zip
如有转载请说明来处,谢谢