Jackson のシリアル化および逆シリアル化中に JSON プロパティに異なる名前を使用するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-26 12:03:29
オリジナル
319 人が閲覧しました

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

Jackson でのシリアル化および逆シリアル化中に JSON プロパティに異なる名前を使用する

シリアル化と逆シリアル化では、JSON クラスと Java クラスの間でフィールド名を一致させる必要があることがよくあります。ただし、これらのプロセス中に同じフィールドに異なる名前を使用したい場合があります。たとえば、次の座標クラスについて考えてみましょう:

<code class="java">class Coordinates {
  int red;
}</code>
ログイン後にコピー

このシナリオでは、逆シリアル化に次の JSON 形式が必要になる可能性があります:

<code class="json">{
  "red": 12
}</code>
ログイン後にコピー

同時に、別の JSON 形式を使用することもできます。シリアル化の場合:

<code class="json">{
  "r": 12
}</code>
ログイン後にコピー

最初は、ゲッター メソッドとセッター メソッドの両方で @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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート