JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。其简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言,同时也易于机器解析和生成,并有效地提升网络传输效率。对于JSON的详细解释可以参考百度百科。目前很多Rest服务都采用JSON数据格式进行传输,并且Java中有很多开源的JSON框架:Json-lib,FastJson,Gson,Jackson,Jettison等。本篇将对这些框架进行简单的介绍。

json-lib:Json-lib是一个Java库,可将bean,maps,collections,java arrays和XML转换为JSON,同时可以将JSON转换为bean和DynaBeans。Json-lib有两种风格,具体取决于jdk的兼容性。json-lib-xx-jdk13与JDK 1.3.1及更高版本兼容。json-lib-xx-jdk15与JDK 1.5兼容。  json-lib 必须依赖一下java 库,如果是XML转换,还需要依赖其他类库,详细可见官方文档:json-lib依赖库。

  • jakarta commons-lang        
  • jakarta commons-beanutils   
  • jakarta commons-collections
  • jakarta commons-logging     
  • ezmorph                     

FastJson:fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。更多介绍可以参考FastJson github。FastJosn具有以下特征:

  • 在服务器端和android客户端中都可以提供最佳性能           
  • 提供简单的toJSONString()和parseObject()方法将Java对象转换为Json对象
  • 允许将现有的不可修改对象与JSON相互转换                  
  • Java泛型的支持                                          
  • 允许对象自定义表示                                      
  • 支持任意复杂的对象(具有深层继承层次结构和泛型类型)   

Gson:Gson是一个Google开源的一个Java库,可用于将Java对象转换Gson可以处理任意Java对象,包括您没有源代码的现有对象。更多介绍可以参考Gson github。Gson具有以下特征:

  • 提供简单的toJson()和fromJson()方法,将Java对象转换为JSO
  • 允许将现有的不可修改对象与JSON相互转换                 
  • Java泛型支持                                           
  • 允许对象的自定义表示                                   
  • 支持任意复杂的对象(具有深层继承层次结构和泛型类型)   

jackson:jackson也是一个知名的基于Java平台的JSON库,Jackson不仅支持流式处理json,还支持数据绑定(POJO和JSON之间的相互转化),甚至还拓展了很多其他第三方库所支持的数据格式(如:CSV,  (Java) Properties, XML和YAML)等。jackson的三个核心模块:jackson-core定义了低级的流式API,包括了JSON处理细节,jackson-annotations包含了Jackson的注解,jackson-databind实现了对象和JSON之间的转换。相对于其他JSON框架,jackson提供了更加强大更多的功能,如下为jackson优点:

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

jettison:jettison是一个Java库,可以在StAX的帮助下将XML转换为JSON,反之亦然。它实现XMLStreamWriter和XMLStreamReader,并支持Mapped和BadgerFish约定。个人觉得这个库不太好用,不作详细介绍

总结:选择哪种JSON库一般从需求,库的性能和易用性等方面考虑,对于本人来说还是比较喜欢fast-json和jackson,这两个库一般会满足项目的所有需求。