java比较两个json文件的差异及说明

目录
  • 比较两个json文件的差异
  • 推荐java目前比较常用的4个json库
    • 一、什么是JSON?
    • 二、常用的四种JSON库

比较两个json文件的差异

其实是以第一个json文件为准,查看第二个对比第一个的差异。

    //排序
    public static JSONArray sortJsonArray(JSONArray array) {
        List<Object> list = array.toJavaList(Object.class);
        list.sort(Comparator.comparing(Object::toString));
        return JSON.parseArray(JSON.toJSONString(list));
    }
    public static void jsonDiff(Path p1, Path p2){
        String j1="",j2="";
        try {
            j1 = FileUtils.readFileToString(p1.toFile(), Charset.defaultCharset());
            j2 = FileUtils.readFileToString(p2.toFile(), Charset.defaultCharset());
        } catch (IOException e) {
            System.out.println("文件读取异常!"+e.getMessage());
            return;
        }
        Map map1=null,map2=null;
        try{
            map1 = JSON.parseObject(j1, Map.class);
            map2 = JSON.parseObject(j2, Map.class);
        }catch (Exception e){
            System.out.println("文件格式异常!"+e.getMessage());
            return;
        }
        if(map1!=null&&map2!=null){
            resolvingMap(map1,map2,"");
        }
    }
    public static void resolvingMap(Map map1,Map map2,String parent){
        map1.forEach((k,v)->{
            if(!map2.containsKey(k)){
                System.out.println("缺少字段{"+parent+"/"+k+"}");
            }else{
                if(v instanceof JSONObject){
                  resolvingMap(JSON.parseObject(JSON.toJSONString(v),Map.class), JSON.parseObject(JSON.toJSONString(map2.get(k)),Map.class),parent+"/"+k);
                } else if(v instanceof JSONArray){
                    try{
                        JSONArray object1 = sortJsonArray((JSONArray) v);
                        JSONArray object2 = sortJsonArray(JSON.parseArray(JSON.toJSONString(map2.get(k))));
                        for (int i = 0; i < object1.size(); i++) {
                            HashMap<String, Object> hs1 = new HashMap<>();
                            HashMap<String, Object> hs2 = new HashMap<>();
                            hs1.put(String.valueOf(i),object1.get(i));
                            try {
                                hs2.put(String.valueOf(i),object2.get(i));
                            }catch (Exception e){
                                System.out.println("数组字段存在问题{"+parent+"/"+k+"["+i+"]}");
                            }
                            resolvingMap(hs1,hs2,parent+"/"+k);
                        }
                    }catch (Exception e){
                        System.out.println("数组信息错误{"+parent+"/"+k+"}");
                    }
                }else {
                    if(!v.equals(map2.get(k))){
                        System.out.println("字段值不一致{"+parent+"/"+k+"}");
                        System.out.println(v+"====>"+map2.get(k));
                        System.out.println("-------------------------");
                    }
                }
            }
        });
    }

测试一下:

    public static void main(String[] args) {
        jsonDiff(Paths.get("/Users/lvshihao/Documents/kz1"),Paths.get("/Users/lvshihao/Documents/kz2"));
    }

效果如图:

/代表子父级关系,如图上的数字代表数组的下标。

推荐java目前比较常用的4个json库

接触过Java的人都知道,Java并未向JSON提供原生支持,因此使用JSON需要借助第三方类库。目前比较常用的JSON库包括Gson、FastJson、Jackson、Json-lib。接下来我就给大家简单分享JSON的基本知识以及四种JSON库。

一、什么是JSON?

JSON(JavaScript Object Notation,JavaScript对象表示法)是一种由道格拉斯·克罗克福特构想和设计、轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。

尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式。JSON文本格式在语法上与创建JavaScript对象的代码相同。由于这种相似性,无需解析器,JavaScript程序能够使用内建的eval()函数,用JSON数据来生成原生的JavaScript对象。

JSON是存储和交换文本信息的语法,类似XML,但JSON比XML更小、更快、更易解析。

JSON具有自我描述性,语法简洁,易于理解。

二、常用的四种JSON库

1、Gson

Gson是目前功能最全的JSON解析神器,其应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。在使用这种对象转换之前,需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法,Gson完全可以实现复杂类型的json到bean或bean到json的转换,是JSON解析的神器。

2、FastJson

FastJson是一个Java语言编写的高性能的JSON处理器,无依赖、不需要例外额外的jar,能够直接跑在JDK上。FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致JSON转换出错,需要制定引用。FastJson采用独创的算法,将parse的速度提升到极致,超过所有JSON库。

3、Jackson

Jackson是当前用的比较广泛的,用来序列化和反序列化JSON的Java开源框架。Jackson社区相对比较活跃,更新速度也比较快,从Github中的统计来看,Jackson是最流行的JSON解析器之一,Spring MVC的默认json解析器便是Jackson。

Jackson优点很多:

  • Jackson所依赖的jar包较少,简单易用。
  • 与其他Java的JSON的框架Gson等相比,Jackson解析大的JSON文件速度比较快。
  • Jackson运行时占用内存比较低,性能比较好
  • Jackson有灵活的API,可以很容易进行扩展和定制。

4、Json-lib

Json-lib最开始的也是应用最广泛的JSON解析工具,Json-lib不好的地方确实是依赖于很多第三方包,对于复杂类型的转换,Json-lib对于JSON转换成bean还有缺陷,比如一个类里面会出现另一个类的list或者map集合,Json-lib从JSON到bean的转换就会出现问题。Json-lib在功能和性能上面都不能满足现在互联网化的需求。

通过以上我的分享相信大家对JSON的基本知识以及四种JSON库已经有了大概了解。其实,了解JSON第三方库的用法只是Java程序员需要掌握技能的一小部分。想要成为一个合格的程序员并不轻松,你要学习很多理论知识并积累项目经验。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java读取本地json文件及相应处理方法

    如下所示: //读取json文件地址 /* String path = getClass().getClassLoader().getResource("menu.json").toString(); path = path.replace("\\", "/"); if (path.contains(":")) { path = path.replace("file:/", ""); }

  • 利用java读取web项目中json文件为map集合方法示例

    前言 本文主要介绍了关于java读取web项目中json文件为map集合的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实例介绍 假设当前项目web目录(/resource/test.json)下有一json文件如下: [ { "path": "content_111", "title": "文章1", "imgUrl": "../../../libs/img/ppt

  • java如何实现抽取json文件指定字段值

    目录 使用场景 抽取json指定字段值 json文件格式 导入依赖 代码实现 完整代码 把需要的数据整理到excel中 使用场景 我有一个5000条数据的json文件,每条数据包含地名.该地的经纬度等其他很多信息.现在想把地名和经纬度抽出来导入到数据库中. navicat自带的导入json格式文件不好用,只能导入json文件中的外层数据,而我需要的地名和经纬度信息在json的内层. 抽取json指定字段值 json文件格式 { "type": "FeatureCollecti

  • Java读取项目json文件并转为JSON对象的操作

    Java读取项目json文件并转为JSON对象 1.创建json文件(demo.json) { "button": [ { "type": "click", "name": "今日歌曲", "key": "V1001_TODAY_MUSIC" }, { "name": "菜单", "sub_button":

  • JAVA 格式化JSON数据并保存到json文件中的实例

    使用fastjson格式化json数据并保存到文件 /** * 将JSON数据格式化并保存到文件中 * @param jsonData 需要输出的json数 * @param filePath 输出的文件地址 * @return */ public static boolean createJsonFile(Object jsonData, String filePath) { String content = JSON.toJSONString(jsonData, SerializerFeat

  • java的url方式、本地方式获取json文件内容

    因为工作原因需要读取json文件,最先是使用url方式不符合要求pass.又使用本地方式读取.记录一下方便后期查看. 注:因为资料都是从网上摘抄,如有问题请告知我. 1.url方式 /** * 通过网络访问json并读取文件 * @param url:http://127.0.0.1:80/dashboard/dept_uuid.json * @return:json文件的内容 */ public static String loadJson (String url) { StringBuild

  • 解决JavaWeb读取本地json文件以及乱码的问题

    最近在开发项目的时候遇到一个问题,在myecilpes上使用googlede gson读取项目中的json文件成功,然后把项目发布到tomcat上再使用同样的方法,会提示"系统找不到指定的路径" 文件放在src/config/下 JsonParser parser = new JsonParser(); JsonObject object = (JsonObject) parser.parse(new FileReader("config/Test.json"));

  • java比较两个json文件的差异及说明

    目录 比较两个json文件的差异 推荐java目前比较常用的4个json库 一.什么是JSON? 二.常用的四种JSON库 比较两个json文件的差异 其实是以第一个json文件为准,查看第二个对比第一个的差异. //排序 public static JSONArray sortJsonArray(JSONArray array) { List<Object> list = array.toJavaList(Object.class); list.sort(Comparator.compari

  • 基于Java中两种jersey文件上传方式

    本文将带领大家使用基于JAX-RS REST风格的实现Jersey来上传文件到服务器制定的文件夹,如果是图片并读取显示出该图片. 准备工作:准备一个form表单,有两个字段,一个是type="file"和type="text",并且表单需要使用POST方式提交.注意改表单需要使用multipart/form-data.该项目使用netbeans8.0和glassfish4.0开发和运行.并且使用maven管理该工程:需要在您的C盘建立一个文件夹,用来存储上传的文件.

  • Python实现的读写json文件功能示例

    本文实例讲述了Python实现的读写json文件功能.分享给大家供大家参考,具体如下: 相比java,python对json文件的处理就简单很多.java操作json文件的话需要引用jar包及相关依赖包,想用java操作json的同学可以去百度,这里就不赘述了. 首先说读json文件 在进行json操作之前,首先要了解json的格式,分辨json文件. json文件格式一般有两种: 第一种:每行一个json类似于以下这种形式: ["name":"Tony",&quo

  • Java实现读取项目中文件(.json或.properties)的方法详解

    目录 1. 读取json file 1.1 Json dependency 1.2 字节流 1.3 buffer reader 2. 读取properties file 3. 好看的css样式 1. 读取json file 1.1 Json dependency <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>

  • java实现两台服务器间文件复制的方法

    本文实例讲述了java实现两台服务器间文件复制的方法.分享给大家供大家参考.具体分析如下: 通常我们使用最多的文件复制功能就是同服务器之间的文件复制功能,这里介绍的是在普通文件复制上功能升级,可以实现两台服务器实现文件的复制,下面一起来看看代码. 1.服务器端 复制代码 代码如下: package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOut

  • 使用Java构造和解析Json数据的两种方法(详解二)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法

  • 使用Java构造和解析Json数据的两种方法(详解一)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法

  • java实现两个文件的拼接

    用Java语言实现两个文件的拼接与上一篇用Java实现两个文件的异或使用的方法都一样,都是FileInputStream()与FileOutputStream()方法,两个相同大小的文件a,b,把文件b拼接在文件a之后,输出的文件名为outfile具体代码详见下述内容: import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutp

随机推荐