跳至主要内容

[Java] Serialize with Jackson

Introduction

Jackson 是 Java 生態系統中最受歡迎的 JSON 處理函式庫之一,由 FasterXML 組織開發。它提供了高效能的 JSON 序列化和反序列化功能,並且是 Spring Boot 的預設 JSON 處理器。

主要特色

  • 高效能:在大多數情況下比 Gson 更快
  • 功能豐富:支援 JSON、XML、YAML 等多種格式
  • Spring 整合:Spring Boot 內建支援
  • 註解豐富:提供大量註解來控制序列化行為
  • 模組化設計:核心、註解、資料綁定等模組分離

基本用法

簡單物件序列化

// 建立 ObjectMapper 實例
ObjectMapper mapper = new ObjectMapper();

// 物件轉 JSON
Person person = new Person("John", 30);
String json = mapper.writeValueAsString(person);

// JSON 轉物件
Person personFromJson = mapper.readValue(json, Person.class);

集合處理

// List 序列化
List<Person> people = Arrays.asList(
new Person("John", 30),
new Person("Jane", 25)
);
String json = mapper.writeValueAsString(people);

// List 反序列化
List<Person> peopleFromJson = mapper.readValue(json,
new TypeReference<List<Person>>(){});

常用註解

@JsonProperty

public class User {
@JsonProperty("user_name")
private String userName;

@JsonProperty("user_id")
private Long userId;
}

@JsonAlias

public class User {
@JsonAlias({"user_name", "username", "name"})
private String userName; // 可以接受多種字段名稱
}

@JsonIgnore 和 @JsonIgnoreProperties

@JsonIgnoreProperties({"password", "internalId"})
public class User {
private String name;

@JsonIgnore
private String password;

private String internalId;
}

@JsonFormat

public class Event {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date eventTime;

@JsonFormat(shape = JsonFormat.Shape.STRING)
private BigDecimal amount;
}

進階配置

ObjectMapper 配置

ObjectMapper mapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

See Also

Jackson annotations API documentation

References