Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。

在项目中引入pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.example</groupId>
  5. <artifactId>json</artifactId>
  6. <packaging>jar</packaging>
  7. <version>1.0-SNAPSHOT</version>
  8. <name>json</name>
  9. <url>http://maven.apache.org</url>
  10. <dependencies>
  11. <dependency>
  12. <groupId>junit</groupId>
  13. <artifactId>junit</artifactId>
  14. <version>3.8.1</version>
  15. <scope>test</scope>
  16. </dependency>
  17. <dependency>
  18. <groupId>com.alibaba</groupId>
  19. <artifactId>fastjson</artifactId>
  20. <version>1.2.76</version>
  21. </dependency>
  22. </dependencies>
  23. </project>

fastjson主要接口

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

创建User类

  1. public class User {
  2. private Long id;
  3. private String name;
  4. public Long getId() {
  5. return id;
  6. }
  7. public void setId(Long id) {
  8. this.id = id;
  9. }
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. }

创建group类

  1. import com.alibaba.fastjson.annotation.JSONField;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Group {
  5. @JSONField(serialize = false)
  6. private Long id;
  7. @JSONField(name = "groupName")
  8. private String name;
  9. private List<User> users = new ArrayList<User>();
  10. public Long getId() {
  11. return id;
  12. }
  13. public void setId(Long id) {
  14. this.id = id;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22. public List<User> getUsers() {
  23. return users;
  24. }
  25. public void setUsers(List<User> users) {
  26. this.users = users;
  27. }
  28. public void addUser(User user) {
  29. users.add(user);
  30. }
  31. }

json编码解码测试类

  1. import com.alibaba.fastjson.JSON;
  2. import com.alibaba.fastjson.serializer.SerializerFeature;
  3. public class Test {
  4. public static void main(String[] args) {
  5. Group group = new Group();
  6. group.setId(0L);
  7. group.setName("admin");
  8. User guestUser = new User();
  9. guestUser.setId(2L);
  10. guestUser.setName("guest");
  11. User rootUser = new User();
  12. rootUser.setId(3L);
  13. rootUser.setName("root");
  14. group.addUser(guestUser);
  15. group.addUser(rootUser);
  16. //json编码
  17. String jsonString = JSON.toJSONString(group, SerializerFeature.UseSingleQuotes);
  18. System.out.println(jsonString);
  19. //json解码
  20. Group groupDecode = JSON.parseObject(jsonString, Group.class);
  21. System.out.println(groupDecode.getName());
  22. }
  23. }

SerializerFeature属性

名称 含义 备注
QuoteFieldNames 输出key时是否使用双引号,默认为true
UseSingleQuotes 使用单引号而不是双引号,默认为false
WriteMapNullValue 是否输出值为null的字段,默认为false
WriteEnumUsingToString Enum输出name()或者original,默认为false
UseISO8601DateFormat Date使用ISO8601格式输出,默认为false
WriteNullListAsEmpty List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty 字符类型字段如果为null,输出为”“,而非null
WriteNullNumberAsZero 数值字段如果为null,输出为0,而非null
WriteNullBooleanAsFalse Boolean字段如果为null,输出为false,而非null
SkipTransientField 如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true
SortField 按字段名称排序后输出。默认为false
WriteTabAsSpecial 把\t做转义输出,默认为false 不推荐
PrettyFormat 结果是否格式化,默认为false
WriteClassName 序列化时写入类型信息,默认为false。反序列化是需用到
DisableCircularReferenceDetect 消除对同一对象循环引用的问题,默认为false
WriteSlashAsSpecial 对斜杠’/’进行转义
BrowserCompatible 将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false
WriteDateUseDateFormat 全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
DisableCheckSpecialChar 一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false
NotWriteRootClassName 含义
BeanToArray 将对象转为array输出
WriteNonStringKeyAsString 含义
NotWriteDefaultValue 含义
BrowserSecure 含义
IgnoreNonFieldGetter 含义
WriteEnumUsingName 含义