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 サイトの他の関連記事を参照してください。