Jackson で JSON シリアル化と逆シリアル化の異なるプロパティ名を処理する方法は?

Susan Sarandon
リリース: 2024-10-30 02:19:02
オリジナル
941 人が閲覧しました

How to Handle Different Property Names for JSON Serialization and Deserialization in Jackson?

JSON シリアル化と逆シリアル化のプロパティ名の違いの処理

Jackson では、シリアル化と逆シリアル化中にプロパティに異なる名前を付けることができます。次の座標クラスを使用した例を考えてみましょう:

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

逆シリアル化には次の JSON 形式が必要です:

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

ただし、シリアル化の場合は、次の形式が必要です:

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

解決策:

解決策は、ゲッター メソッドとセッター メソッドの両方で @JsonProperty アノテーションを使用し、メソッドの名前が異なることを確認することです:

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

    @JsonProperty("r")
    public byte getRed() {
      return red;
    }

    @JsonProperty("red")
    public void setRed(byte red) {
      this.red = red;
    }
}</code>
ログイン後にコピー

メソッド名は異なっていなければならないことに注意してください。 Jackson は、それらを、異なる名前を持つ同じプロパティではなく、異なるプロパティへの参照として解釈します。

追加メモ:

  • クラス属性については、次のようにすることをお勧めします。適切なデータ型 (この場合はバイト) を使用して、JSON ペイロード内の潜在的な値と一致させます。
  • シリアル化と逆シリアル化に使用される ObjectMapper は、必要に応じてカスタマイズして追加の設定を構成できます。

テストコード:

<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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!