Rumah >Java >javaTutorial >Bagaimana Mengendalikan Nama Harta Berbeza untuk Pensirilan JSON dan Penyahserialisasian di Jackson?

Bagaimana Mengendalikan Nama Harta Berbeza untuk Pensirilan JSON dan Penyahserialisasian di Jackson?

Susan Sarandon
Susan Sarandonasal
2024-10-30 02:19:021015semak imbas

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

Mengendalikan Perbezaan Nama Harta untuk Pensirilan dan Penyahserikatan JSON

Di Jackson, nama mungkin berbeza untuk sesuatu harta semasa pensirilan dan penyahseririan. Mari kita pertimbangkan contoh dengan kelas Koordinat berikut:

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

Kami mahukan format JSON berikut untuk penyahsirilan:

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

Walau bagaimanapun, untuk bersiri, kami memerlukan format berikut:

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

Penyelesaian:

Penyelesaian terletak pada penggunaan anotasi @JsonProperty pada kedua-dua kaedah getter dan setter, memastikan ia mempunyai nama yang berbeza:

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

Perhatikan bahawa nama kaedah mestilah berbeza. Jackson mentafsirkannya sebagai rujukan kepada sifat yang berbeza, bukannya sifat yang sama dengan nama yang berbeza.

Nota Tambahan:

  • Untuk atribut kelas, dinasihatkan untuk gunakan jenis data yang sesuai (bait dalam kes ini) untuk memadankan nilai yang berpotensi dalam muatan JSON.
  • ObjectMapper yang digunakan untuk bersiri dan penyahsirilan boleh disesuaikan jika perlu untuk mengkonfigurasi tetapan tambahan.

Kod Ujian:

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

Output:

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

Atas ialah kandungan terperinci Bagaimana Mengendalikan Nama Harta Berbeza untuk Pensirilan JSON dan Penyahserialisasian di Jackson?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn