java中Json工具的用法比较与性能测试



json调研
目的:
比较各种java中的四种json工具,并选出适合后期项目使用的一种工具,统一让大家来使用。

比较点:
  • 使用简单
  • 容易理解
  • 性能
  • 功能



java中的json解析工具有:
一、jackson
二、gson
三、json-lib
四、fastjson


一、jackson
jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。最新的版本到2.8,稳定版为2.7
从Jackson 2.0起,核心组件包括:
jackson-annotations(带注释的数据绑定包)。
jackson-core(流式的解析器和生成器)。
jackson-databind(对象映射器,JSON树模型)。
1、java对象转json[json序列化]
     看demo
2、json转java类[json反序列化]
     看demo
3、json注解
Jackson提供了一系列注解,方便对JSON序列化和反序列化进行控制,下面介绍一些常用的注解。
  • @JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性。
  • @JsonFormat 此注解用于属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。
  • @JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化name,JsonProperty("name")。
  • @JsonIgnoreProperties({"name","age"}),作用在类上,用来说明属性在序列化和反序列化时需要忽略掉。
  • @JsonIgnoreProperties(ignoreUnknown=true)也可以注明在反序列化的时候过滤掉未知的属性,防止报错。
  • @JsonUnwrapped作用在属性上,用来将子Json对象的属性添加到Json对象。
  • @JsonUnwrapped作用在属性上,2.0+版本中添加了prefix和suffix属性,用在字段添加前后缀。
  • @JsonNaming作用在类或方法上,作用和JsonProperty名称相同,同时也支持我们自己定制属性命名的策略。
  • @JsonSerializer(using=MyDateSerializer.class),来指定序列化的实现,一般用于各种自定义的格式转换。
  • @JsonDeserializer(using=MyDateDeserializer.class),来指定反序列化的实现,一般用于格式的转换。
  • @JsonPropertyOrder(alphabetic=true,value={"c","b"}),序列化时对属性是否按字母顺序排序,默认不排序,value中的是优先其他排序的属性名称。
  • 。。。。。很多灵活好用的注解,很强大
看demo
注:1、默认的时间格式即为timestamps形式。

优势:
  • 依赖包较少;
  • 性能较高和功能比较完善;
  • 社区较活跃;
  • 更新较快;

二、gson
      Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。目前 最新的版本为:2.7,核心包为:
      gson-2.7.jar
1、java对象转json[json序列化]
     看demo
2、json转java类[json反序列化]
     看demo
3、json注解
  •     @Expose可排除我们不想序列化的元素,但是必须保证其他的属性都加上@Expose,排除的不加或者使用@Expose(serialize=false),同时需要重新构造Gson。
  Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); #个人觉得不太方便。
  •     @SerializedName可以将属性名序列化为另一个名称,例如将email序列化为mail,即是@SerializedName(value="mail")
  •     @Since,Until注解可以指定属性的版本号,通过版本号来判断是否序列化某属性,@Since(value=1.0)表示从此版本(1.0<=,包括1.0本身)开始,都可以序列化,@Until(value=1.5)表示到此版本(<1.5,不包括1.5本身)为止都可以序列化,同时需要重新构造Gson的类。       
     Gson gson = new GsonBuilder().setVersion(double).create();    #double是指定的版本号

三、json-lib
    最新的版本为2.4,用最新的jdk15,核心包为 json-lib-2.4-jdk15.jar, 同时依赖以下包:
  •       commons-lang 2.4 
  •      commons-beanutils 1.7.0 
  •      commons-collections 3.2 
  •      commons-logging 1.1.1 
  •      ezmorph  1.0.6 
1、java对象转json[json序列化]
     看demo
2、json转java类[json反序列化]
     看demo
3、处理器
     看demo
劣势:
  • 依赖很多第三方包;
  • json转化为bean有缺陷,尤其在一个类里面出现另一个类的list或map。
  • 在功能上和性能上不能满足互联网的需求。

四、fastjson
Fastjson是一个Java语言编写的JSON处理器,由阿里巴巴公司开发。
1、遵循
http://json.org标准,为其官方网站收录的参考实现之一。
2、功能qiang打,支持JDK的各种类型,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。
3、无依赖,不需要例外额外的jar,能够直接跑在JDK上。
4、开源,使用Apache License 2.0协议开源。
http://code.alibabatech.com/wiki/display/FastJSON/Home
5、具有超高的性能,java世界里没有其他的json库能够和fastjson可相比了。
1、java对象转json[json序列化]
     看demo
2、json转java类[json反序列化]
     看demo
3、json注解
  • @JSONField
  • @JSONCreator
注:1、默认的时间格式即为timestamps形式。

总结:
  • 在使用上fastjson和jackson相对较简单;
  • 都比较容易理解;
  • 在性能上fastjson>jackson>gson>json-lib;
  • 在功能上gson>jackson>fastjson>json-lib;
详细代码的下载地址:http://download.csdn.net/detail/lzqs201314/9569981


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值