首頁  >  文章  >  Java  >  如何在 Jackson 序列化和反序列化期間對 JSON 屬性使用不同的名稱?

如何在 Jackson 序列化和反序列化期間對 JSON 屬性使用不同的名稱?

Linda Hamilton
Linda Hamilton原創
2024-10-26 12:03:29238瀏覽

How to Use Different Names for JSON Properties During Jackson Serialization and Deserialization?

在Jackson 中的序列化和反序列化過程中對JSON 屬性使用不同的名稱

序列化和反序列化通常需要匹配JSON 和Java 類別之間的欄位名稱。但是,在某些情況下,您可能希望在這些過程中對相同欄位使用不同的名稱。例如,考慮以下Coords 類別:

<code class="java">class Coordinates {
  int red;
}</code>

在這種情況下,您可能需要以下JSON 格式進行反序列化:

<code class="json">{
  "red": 12
}</code>

同時,您可能更喜歡不同的JSON 格式對於序列化:

<code class="json">{
  "r": 12
}</code>

最初,嘗試在getter 和setter 方法上使用@JsonProperty 註釋可能會導致異常:

<code class="java">@JsonProperty("r")
public byte getRed() {
  return red;
}

@JsonProperty("red")
public void setRed(byte red) {
  this.red = red;
}</code>

但是,可以透過確保方法名稱是不同的。例如:

<code class="java">public byte getR() {
  return red;
}

public void setRed(byte red) {
  this.red = red;
}</code>

透過提供不同的方法名稱,Jackson 將它們解釋為單獨的欄位。以下測試程式碼示範了此方法的成功使用:

<code class="java">Coordinates c = new Coordinates();
c.setRed((byte) 5);

ObjectMapper mapper = new ObjectMapper();
System.out.println("Serialization: " + mapper.writeValueAsString(c));

Coordinates r = mapper.readValue("{\"red\":25}", Coordinates.class);
System.out.println("Deserialization: " + r.getR());</code>

預期輸出為:

Serialization: {"r":5}
Deserialization: 25

以上是如何在 Jackson 序列化和反序列化期間對 JSON 屬性使用不同的名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn