1. 怎么获得fastjson?
你可以通过如下地方下载fastjson:
- maven中央仓库:http://central.maven.org/maven2/com/alibaba/fastjson/
-
Sourceforge.net :https://sourceforge.net/projects/fastjson/files/
-
在maven中如何配置fastjson依赖 fastjson最新版本都会发布到maven中央仓库,你可以直接依赖。 com.alibaba fastjson x.x.x 其中x.x.x不是具体的版本好,最新版本你通过fastjson的首页(https://github.com/alibaba/fastjson/wiki)获得。
2. fastjson主要的API哪些?
fastjson入口类是com.alibaba.fastjson.JSON,主要的API是JSON.toJSONString,和parSEObject。
package com.alibaba.fastjson; public abstract class JSON { public static final String toJSONString(Object object); public static final <T> T parSEObject(String text,Class<T> clazz,Feature... features); }
序列化:
String jsonString = JSON.toJSONString(obj);
反序列化:
VO vo = JSON.parSEObject("...",VO.class);
泛型反序列化:
import com.alibaba.fastjson.TypeReference; List<VO> list = JSON.parSEObject("...",new TypeReference<List<VO>>() {});
3. 哪里找fastjson的使用例子
fastjson的使用例子看这里:https://github.com/alibaba/fastjson/wiki/Samples-DataBind
4. fastjson的性能如何?
fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果看这里:https://github.com/eishay/jvm-serializers/wiki/Staging-Results。
JSON.toJSONString(obj,SerializerFeature.DisableCircularReferenceDetect) VO vo = JSON.parSEObject("...",VO.class,Feature.DisableCircularReferenceDetect)
这里有jackson作者cowtowncoder等人对fastjson的性能评价:https://groups.google.com/forum/#!topic/java-serialization-benchmarking/8eS1KOquAhw
5. fastjson性能比gson怎样?
fastjson比gson快大约6倍,测试结果上这里:https://github.com/eishay/jvm-serializers/wiki/Staging-Results。gson的g可能是“龟”拼音的缩写,龟速的json库。
6. fastjson可以运行在android上么?
fastjson有专门的for android版本,去掉不常用的功能。jar占的字节数更小。git branch地址是:https://github.com/alibaba/fastjson/tree/android。
7. fastjson序列化的需要像json-lib一样配置java bean的序列化么?
不需要,fastjson的序列化和反序列化都不需要做特别配置,唯一的要求是,你序列化的类符合java bean规范。
8. fastjson如何处理日期
fastjson处理日期的API很简单,例如:
JSON.toJSONStringWithDateFormat(date,"yyyy-MM-dd HH:mm:ss.SSS")
使用ISO-8601日期格式
全局修改日期格式JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd"; JSON.toJSONString(obj,SerializerFeature.WriteDateUseDateFormat);反序列化能够自动识别如下日期格式:
- ISO-8601日期格式
- yyyy-MM-dd
- yyyy-MM-dd HH:mm:ss
- yyyy-MM-dd HH:mm:ss.SSS
- 毫秒数字
- 毫秒数字字符串
- .NET JSON日期格式
- new Date(198293238)
9. 如何定制序列化?
你可以使用SimplePrePropertyFilter过滤字段,详细看这里:https://github.com/alibaba/fastjson/wiki/%E4%BD%BF%E7%94%A8SimplePropertyPreFilter%E8%BF%87%E6%BB%A4%E5%B1%9E%E6%80%A7
关于定制序列化,详细的介绍看这里:https://github.com/alibaba/fastjson/wiki/%E5%AE%9A%E5%88%B6%E5%BA%8F%E5%88%97%E5%8C%96
10. 当对象存在引用时,序列化后的结果浏览器不支持,怎么办?
使用SerializerFeature.DisableCircularReferenceDetect特性关闭引用检测和生成。例如:
String jsonString = JSON.toJSONString(obj,SerializerFeature.DisableCircularReferenceDetect );
11. IE 6不支持JSON带中文字符串,要怎么处理?
fastjson提供了BrowserCompatible这个配置,打开之后,所有的中文都会序列化为\uXXXX这种格式,字节数会多一些,但是能兼容IE 6。
12. fastjson 如何处理超大对象和超大JSON文本fastjson提供了Stream API,详细看这里https://github.com/alibaba/fastjson/wiki/Stream-api
13. 使用@JSONField定制序列化
fastjson提供了使用Annotation定制序列化和反序列化的功能。https://github.com/alibaba/fastjson/wiki/JSONField
实例代码:
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);Output
{"id":0,"name":"admin","users":[{"id":2,"name":"guest"},{"id":3,"name":"root"}]}Decode
String jsonString = ...; Group group = JSON.parSEObject(jsonString,Group.class);Group.java
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; } }User.java
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; } }这个是fastJson的实例代码,如果你感觉还是不清楚怎么用。那请看我的下一篇用fastJson解析本地文本http://blog.csdn.net/kluing/article/details/41007675