zoukankan      html  css  js  c++  java
  • JSON库的使用研究(一)

    最近用到JSON,收集了一些资料,整理如下:

    选择一个合适的JSON库要从多个方面进行考虑:

    1. 字符串解析成JSON性能
    2. 字符串解析成Java Object性能
    3. Java Object转JSON性能
    4. 集合构造JSON性能
    5. 易用性

    以下是整理的各个库的资料:

    Gson

    项目地址:https://github.com/google/gson

    Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后已被许多公司或用户应用。 Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。 在使用这种对象转换之前,需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。 类里面只要有get和set方法,Gson完全可以实现复杂类型的json到bean或bean到json的转换,是JSON解析的神器。

    FastJson

    项目地址:https://github.com/alibaba/fastjson

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

    Jackson

    项目地址:https://github.com/FasterXML/jackson

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

    Jackson优点很多:

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

    目前最新版本是2.9.4,Jackson 的核心模块由三部分组成:

    1. jackson-core 核心包,提供基于”流模式”解析的相关 API,它包括 JsonPaser 和 JsonGenerator。Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。
    2. jackson-annotations 注解包,提供标准注解功能;
    3. jackson-databind 数据绑定包,提供基于”对象绑定” 解析的相关 API( ObjectMapper )和”树模型” 解析的相关 API(JsonNode);基于”对象绑定” 解析的 API 和”树模型”解析的 API 依赖基于”流模式”解析的 API。

    Json-lib

    项目地址:http://json-lib.sourceforge.net/index.html

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

    maven依赖

      1 <!-- Json libs-->
      2 <dependency>
      3  <groupId>net.sf.json-lib</groupId>
      4  <artifactId>json-lib</artifactId>
      5  <version>2.4</version>
      6  <classifier>jdk15</classifier>
      7 </dependency>
      8 <dependency>
      9  <groupId>com.google.code.gson</groupId>
     10  <artifactId>gson</artifactId>
     11  <version>2.8.2</version>
     12 </dependency>
     13 <dependency>
     14  <groupId>com.alibaba</groupId>
     15  <artifactId>fastjson</artifactId>
     16  <version>1.2.46</version>
     17 </dependency>
     18 <dependency>
     19  <groupId>com.fasterxml.jackson.core</groupId>
     20  <artifactId>jackson-databind</artifactId>
     21  <version>2.9.4</version>
     22 </dependency>
     23 <dependency>
     24  <groupId>com.fasterxml.jackson.core</groupId>
     25  <artifactId>jackson-annotations</artifactId>
     26  <version>2.9.4</version>
     27 </dependency>
  • 相关阅读:
    异常解决:swagger2.9.2 报java.lang.NumberFormatException: For input string: ““...
    SpringBoot中使用热部署插件
    SpringBoot中使用自定义拦截器
    SpringBoot开发的接口实现RESTFull的设计风格
    SpringBoot中使用jsp页面的方法
    SpringBoot的自定义配置方法二,通过@Value注解
    SpringBoot的自定义配置方法一,通过自定义配置文件
    Eclipse中使用Mybatis Generator自动生成POJO类、mapper类等
    Eclipse中将Maven工程转成SpringBoot工程
    相对高效的遍历Map的方法,其他方法效率相对较低
  • 原文地址:https://www.cnblogs.com/tyol/p/10536836.html
Copyright © 2011-2022 走看看