高性能JSON开发包FastJson怎么用

95次阅读
没有评论

共计 4434 个字符,预计需要花费 12 分钟才能阅读完成。

高性能 JSON 开发包 FastJson 怎么用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

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 可相比了。

如果获得 Fastjson?
SVN:http://code.alibabatech.com/svn/fastjson/trunk/
WIKI:http://code.alibabatech.com/wiki/display/FastJSON/Home
Issue Tracking:http://code.alibabatech.com/jira/browse/FASTJSON

如果你使用了 Maven,maven repository 配置如下:

repository 
 id opensesame /id 
 name Alibaba OpenSource Repsoitory /name 
 url http://code.alibabatech.com/mvn/releases/ /url 
 snapshots 
 enabled false /enabled 
 /snapshots 
 /repository

pom.xml 文件中加入依赖依赖:

dependency 
 groupId com.alibaba /groupId 
 artifactId fastjson /artifactId 
 version 1.0.4 /version 
 /dependency

如果没有使用 maven,可以直接下载:

Binary : http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.1.1/fastjson-1.1.1.jar
Source :http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.1.1/fastjson-1.1.1-sources.jar
Subversion : http://code.alibabatech.com/svn/fastjson/

使用介绍:
Fastjson 的最主要的使用入口是 com.alibaba.fastjson.JSON

import com.alibaba.fastjson.JSON;
public static final Object parse(String text); //  把 JSON 文本 parse 为 JSONObject 或者 JSONArray
public static final JSONObject parseObject(String text); //  把 JSON 文本 parse 成 JSONObject
public static final  T  T parseObject(String text, Class T  clazz); //  把 JSON 文本 parse 为 JavaBean
public static final JSONArray parseArray(String text); //  把 JSON 文本 parse 成 JSONArray
public static final  T  List T  parseArray(String text, Class T  clazz); // 把 JSON 文本 parse 成 JavaBean 集合
public static final String toJSONString(Object object); //  将 JavaBean 序列化为 JSON 文本
public static final String toJSONString(Object object, boolean prettyFormat); //  将 JavaBean 序列化为带格式的 JSON 文本
public static final Object toJSON(Object javaObject);  将 JavaBean 转换为 JSONObject 或者 JSONArray。

代码示例:
代码示例用到类 User 和 Group:

public class User {
 private Long id;
 private String name;
 public Long getId() { return id; }
 public void setId(Long id) { this.id = id; }
 public String getName() { return name; }
 public void setName(String name) { this.name = name; }
public class Group {
 private Long id;
 private String name;
 private List User  users = new ArrayList User 
 public Long getId() { return id; }
 public void setId(Long id) { this.id = id; }
 public String getName() { return name; }
 public void setName(String name) { this.name = name; }
 public List User  getUsers() { return users; }
 public void setUsers(List User  users) { this.users = users; }
}

Encode 代码示例:

import com.alibaba.fastjson.JSON;
Group group = new Group();
group.setId(0L);
group.setName( admin 
User guestUser = new User();
guestUser.setId(2L);
guestUser.setName( guest 
User rootUser = new User();
rootUser.setId(3L);
rootUser.setName( root 
group.getUsers().add(guestUser);
group.getUsers().add(rootUser);
String jsonString = JSON.toJSONString(group);
System.out.println(jsonString);

Decode 代码示例:

Group group2 = JSON.parseObject(jsonString, Group.class);

之前的一个版本是 1.1.0,1.1.0 采用 asm 和 SortFastMatch 算法提高性能,由于过于着急展示其优越的性能,没有进行严格测试就发布了。

1.1.1 相对于 1.1.0,这是一个比较稳定的版本了,行测试覆盖率重新提升到 90% 以上,build verify testcase 983 个。

这个版本进一步完善了 asm 和 SortFieldFastMatch 算法,进一步提升了性能,同时补充了大量的 testcase,提升了稳定性,我向你推荐使用这个版本,使用这个版本你将会得到令人惊奇的性能。

1.1.1 版本的 asm 来源自 objectweb 的 asm 项目,根据 fastjson 的需要做裁剪,确保引入 asm 的同时不引起包大小的过渡变大。

为了更好使用 sort field martch 优化算法提升 parser 的性能,fastjson 序列化的时候,缺省把 SerializerFeature.SortField 特性打开了。反序列化的时候也缺省把 SortFeidFastMatch 的选项打开了。这样,如果你用 fastjson 序列化的文本,输出的结果是按照 fieldName 排序输出的,parser 时也能利用这个顺序进行优化读取。这种情况下,parser 能够获得非常好的性能。

我使用 github.com/eishay/jvm-serializers/ 提供的程序做测试,性能数据如下:

  序列化时间反序列化时间大小压缩后大小 java 序列化 854643199889541hessian664310043501313protobuf30081694239149thrift31821951349197avro35752095221133json-lib45734149741485263jackson32452986503271fastjson22921499468251

测试跑的脚本是:

./run -chart -include=`cat serializers.txt | tr  \\n   , ` data/media.1.cks

从上面的数据来看,fastjson 的性能已经超越 protobuf、thrift、avro 这些二进制协议了。一个文本协议的性能超越二进制协议是很难的,我很高兴向大家宣布我做到了!!

鉴于 fastjson 优越的性能表现,我建议做如下事情;
1、替换其他所有的 json 库,java 世界里没有其他的 json 库能够和 fastjson 可相比了。
2、使用 fastjson 的序列化和反序列化替换 Java serialize,java serialize 不单性能慢,而且体制大。
3、使用 fastjson 替换 hessian,json 协议不必 hessian 体积大,而且 fastjson 性能优越,数倍于 hessian
4、把 fastjson 用于 memached 缓存对象数据。

如何得到它?

如果您是 Maven 用户,只需使用我们的 Maven 存储库即可 (http://code.alibabatech.com/mvn/releases/) 具有后续依赖性

dependency 
  groupId com.alibaba /groupId 
  artifactId fastjson /artifactId 
  version 1.1.1 /version 
 /dependency

关于高性能 JSON 开发包 FastJson 怎么用问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计4434字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)