Heim  >  Artikel  >  Java  >  Wie verwende ich unterschiedliche Namen für JSON-Eigenschaften während der Jackson-Serialisierung und -Deserialisierung?

Wie verwende ich unterschiedliche Namen für JSON-Eigenschaften während der Jackson-Serialisierung und -Deserialisierung?

Linda Hamilton
Linda HamiltonOriginal
2024-10-26 12:03:29238Durchsuche

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

Verwendung unterschiedlicher Namen für JSON-Eigenschaften während der Serialisierung und Deserialisierung in Jackson

Serialisierung und Deserialisierung erfordern häufig übereinstimmende Feldnamen zwischen JSON- und Java-Klassen. Es kann jedoch vorkommen, dass Sie während dieser Prozesse unterschiedliche Namen für dasselbe Feld verwenden möchten. Betrachten Sie beispielsweise die folgende Koordinatenklasse:

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

In diesem Szenario möchten Sie möglicherweise das folgende JSON-Format für die Deserialisierung:

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

Gleichzeitig bevorzugen Sie möglicherweise ein anderes JSON-Format für die Serialisierung:

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

Zunächst kann der Versuch, @JsonProperty-Annotationen sowohl für Getter- als auch für Setter-Methoden zu verwenden, zu einer Ausnahme führen:

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

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

Dieses Problem kann jedoch behoben werden, indem sichergestellt wird dass die Methodennamen unterschiedlich sind. Zum Beispiel:

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

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

Durch die Bereitstellung verschiedener Methodennamen interpretiert Jackson diese als separate Felder. Der folgende Testcode demonstriert die erfolgreiche Verwendung dieses Ansatzes:

<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>

Die erwartete Ausgabe ist:

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

Das obige ist der detaillierte Inhalt vonWie verwende ich unterschiedliche Namen für JSON-Eigenschaften während der Jackson-Serialisierung und -Deserialisierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn