业务场景:调用API接口,获取到返回数据为JSON格式,且多重嵌套。
Json数据格式
实体类Result定义类、嵌套类
在使用fastJson的JSON.pareseArray转换时,注意这里必须用List<>。否则会转换异常报错
com.alibaba.fastjson.JSONException: syntax error, expect {, actual [, pos 714, fieldName proSpec, fastjson-version 1.2.54
这里是因为json数据ProSpec后面是“[”
众所周知,这个“[”会被解析成数组。如果在Result中不用List<>,会被认为单个对象,发生转换错误。
而使用第二种方法,仅仅用jackSon处理,在Result中这样设置实体类
并不会出问题。这是因为根本不涉及json TO bean的转换。也就是说,使用jackSon。在实体类中,两种嵌套类的写法都是可以的。
第一种:jsob-lib+fastJson
Maven引入jar:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier><!-- jdk版本 -->
</dependency>
第二种:jackson单独处理
第三种:fastJson单独处理
接上图
测试中的耗时并不严谨,数据也不够多。对于这三者的性能效率,无法得出很肯定的高低。但是以本人的测试,fastJson不愧是fast,测试的六组数据,用时均都在200毫秒以内。第一种方法更第二种方法分别是330-434ms、210-282ms之间。
至于Gson,本人比较懒,并没有继续搞了。听闻如果对程序性能要较大的要求,可以gson和faseJson混合使用。
使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean。这样貌似可以达到最优性能和数据转换的准确性。