Fastjson 简明教程:让你轻松掌握 Java 中的 JSON 序列化和反序列化

什么是 Fastjson?

Fastjson 是一个 Java 序列化和反序列化库,它可以将 Java 对象与 JSON 数据进行互转换。它是阿里巴巴开源的项目之一,目前已经成为了 Java 开发中最受欢迎的 JSON 库之一。

为什么要使用 Fastjson?

JSON 是一种轻量级的数据交换格式,它被广泛应用于前后端的数据传输、API 接口的设计和数据存储等场景。在 Java 开发中,我们经常需要将 Java 对象转换为 JSON 数据或将 JSON 数据转换为 Java 对象,这时候就需要使用 JSON 库。

虽然 Java 中有很多 JSON 库可供选择,但是 Fastjson 具有以下优点:

  • 速度快:Fastjson 的序列化和反序列化速度非常快,是目前 Java 中最快的 JSON 库之一。
  • 功能强大:Fastjson 支持复杂的 Java 对象和 JSON 数据类型转换,支持多种序列化和反序列化方式。
  • 易于使用:Fastjson 的 API 简单易用,可以轻松地实现 Java 对象和 JSON 数据的转换。

如何使用 Fastjson?

1. 添加 Fastjson 依赖

在使用 Fastjson 之前,我们需要在项目中添加 Fastjson 的依赖。


<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.70</version>
</dependency>

2. Java 对象转 JSON 字符串

使用 Fastjson 将 Java 对象转换为 JSON 字符串非常简单,只需要调用 toJSONString 方法即可。


// 定义一个 Java 对象
public class User {
  private String name;
  private int age;

  // 省略构造器和 getter/setter 方法
}

// 将 Java 对象转换为 JSON 字符串
User user = new User("Tom", 18);
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr); // {"age":18,"name":"Tom"}

3. JSON 字符串转 Java 对象

使用 Fastjson 将 JSON 字符串转换为 Java 对象也非常简单,只需要调用 parseObject 方法即可。


// 将 JSON 字符串转换为 Java 对象
String jsonStr = "{\"age\":18,\"name\":\"Tom\"}";
User user = JSON.parseObject(jsonStr, User.class);
System.out.println(user.getName()); // Tom
System.out.println(user.getAge()); // 18

4. 自定义序列化和反序列化方式

Fastjson 支持多种序列化和反序列化方式,如果默认的方式不符合我们的需求,我们可以自定义序列化和反序列化方式。

例如,我们可以将 Java 中的 LocalDateTime 类型转换为 ISO-8601 格式的字符串,以便在 JSON 数据中传输。


// 定义一个 LocalDateTime 序列化器
public class LocalDateTimeSerializer implements ObjectSerializer {
  public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
    if (object == null) {
      serializer.writeNull();
    } else {
      LocalDateTime dateTime = (LocalDateTime) object;
      serializer.write(dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
    }
  }
}

// 定义一个 LocalDateTime 反序列化器
public class LocalDateTimeDeserializer implements ObjectDeserializer {
  public LocalDateTime deserialze(DefaultJSONParser parser, Type type, Object fieldName) throws JSONException {
    String datetimeStr = parser.getLexer().stringVal();
    return LocalDateTime.parse(datetimeStr, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
  }

  public int getFastMatchToken() {
    return JSONToken.LITERAL_STRING;
  }
}

// 注册自定义序列化器和反序列化器
SerializeConfig.getGlobalInstance().put(LocalDateTime.class, new LocalDateTimeSerializer());
ParserConfig.getGlobalInstance().putDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());

// 将 Java 对象转换为 JSON 字符串
User user = new User("Tom", 18);
user.setCreateTime(LocalDateTime.now());
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr); // {"age":18,"createTime":"2022-01-01T00:00:00","name":"Tom"}

// 将 JSON 字符串转换为 Java 对象
String jsonStr = "{\"age\":18,\"createTime\":\"2022-01-01T00:00:00\",\"name\":\"Tom\"}";
User user = JSON.parseObject(jsonStr, User.class);
System.out.println(user.getCreateTime()); // 2022-01-01T00:00

总结

本文介绍了 Fastjson 的基本用法,包括添加 Fastjson 依赖、Java 对象转 JSON 字符串、JSON 字符串转 Java 对象和自定义序列化和反序列化方式。希望通过本文的介绍,读者能够掌握 Fastjson 的常用操作,更加方便地进行 Java 对象和 JSON 数据的转换。

本文来源:词雅网

本文地址:https://www.ciyawang.com/s06ch2.html

本文使用「 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 」许可协议授权,转载或使用请署名并注明出处。

相关推荐