"Halo, Amigo!"

"Halo, Ellie!"

"Amarga sampeyan wis dikenalake karo JSON, ayo ngomong luwih akeh babagan iki."

"Oke. Biasane nganggo endi?"

"Iki cara kerjane biasane. Ana wong (klien) njaluk data saka program Jawa (server). Program kasebut nggawe obyek Jawa lan ngisi informasi saka basis data. Banjur ngowahi dadi format sing njaluk (klien). ) bisa ngerti, kayata JSON, lan dikirim maneh."

"Ayo kula pitutur marang kowe carane bisa karo JSON ing Jawa. Ateges, kita mung kudu nindakake rong bab: serialize obyek Jawa menyang format JSON, lan deserialize obyek Jawa saka format JSON."

"Ing tembung liyane, JSON minangka standar kanggo ngirim pesen / data saka siji program menyang program liyane. Ana akeh standar sing kaya ngono. Nanging yen program kasebut ditulis ing JavaScript, biasane nyoba nggunakake JSON."

"Oke. Aku siyap."

"Apik. Banjur ayo miwiti."

Serialisasi menyang JSON - 1

"Minangka sampeyan wis ngerti, Jawa wis dibangun ing pribadi serialization standar. Nanging padha ora ndhukung JSON. Dadi, yen sampeyan perlu kanggo serialize obyek menyang JSON, sampeyan bisa nggunakake salah siji saka frameworks populer (perpustakaan) sing ngerti carane nindakake iki."

"Apa bedane antarane kerangka kerja sing beda-beda iki?"

"Dheweke biasane beda-beda ing tingkat kerumitan: ana kerangka sing mung bisa nindakake dhasar, nanging cilik lan prasaja. Lan ana kerangka kompleks gedhe sing bisa nindakake luwih akeh."

"Jackson minangka salah sawijining kerangka kerja sing paling populer. Kita bakal nggunakake minangka conto nalika ndeleng cara nggarap JSON."

"Pisanan, sampeyan kudu ngundhuh framework iki lan nambah menyang project. Sampeyan kudu nindakake iki langsung ing IntelliJ IDEA. Sampeyan bisa ngundhuh framework nggunakake link iki ."

"Rampung."

"Apik. Ayo diterusake."

"Ngonversi obyek Jawa menyang JSON meh gampang kaya serializing. Kanggo nindakake iki, ana kelas ObjectMapper khusus (com.fasterxml.jackson.databind.ObjectMapper)."

"Ayo kula nuduhake conto sing bisa digunakake, banjur kita bakal nganalisa:"

Ngonversi obyek menyang JSON"
public static void main(String[] args) throws IOException
{
 // Create an object to be serialized into JSON
 Cat cat = new Cat();
 cat.name = "Missy";
 cat.age = 5;
 cat.weight = 4;

 // Write the result of the serialization to a StringWriter
 StringWriter writer = new StringWriter();

 // This is the Jackson object that performs the serialization
 ObjectMapper mapper = new ObjectMapper();

 // And here's the serialization itself: the first argument is where, and the second is what
 mapper.writeValue(writer, cat);

 // Convert everything written to the StringWriter into a String
 String result = writer.toString();
 System.out.println(result);
}
Kelas Cat sing obyek diowahi dadi JSON
@JsonAutoDetect
class Cat
{
 public String name;
 public int age;
 public int weight;
Cat(){}
}
Asil serialisasi lan output layar:
{"name":"Missy", "age":5, "weight":4}

"Iki cara kerjane:"

"Ing baris 4-7, kita nggawe obyek Cat lan isi karo data."

"Ing baris 10, kita nggawe obyek Writer ngendi kita bakal nulis representasi JSON-string saka obyek."

"Ing baris 13, kita nggawe obyek ObjectMapper sing bakal nindakake kabeh serialisasi."

"Ing baris 16, kita nulis perwakilan JSON saka obyek kucing kanggo penulis ."

"Ing baris 19-20, kita nampilake asil ing layar."

"Kabeh katon cukup prasaja. Ora luwih angel tinimbang serialisasi asli ing Jawa."

"Apa sing bakal katon deserialization?"

"Meh padha, mung luwih cendhak:"

Ngonversi obyek saka JSON
public static void main(String[] args) throws IOException
{
 String jsonString = "{ \"name\":\"Missy\", \"age\":5, \"weight\":4}";
 StringReader reader = new StringReader(jsonString);

 ObjectMapper mapper = new ObjectMapper();

 Cat cat = mapper.readValue(reader, Cat.class);
}
Kelas sing obyek deserialized saka format JSON
@JsonAutoDetect
class Cat
{
 public String name;
 public int age;
 public int weight;

 Cat() { }
}

"Iku malah luwih gampang. We njupuk ObjectMapper lan pass iku senar utawa StringReader karo JSON, uga kelas obyek kanggo deserialized . Banjur kita nelpon cara readValue , lan minangka output kita njaluk obyek Jawa siap-digawe karo. kabeh data."

“Lho, persis kaya deseralisasi ing Jawa.”

"Meh. Ana sawetara syarat diselehake ing obyek serialized menyang, utawa deserialized saka, JSON:"

" 1)  lapangan kudu katon: kudu umum utawa duwe getters lan setter"

" 2)  kudu ana konstruktor standar (siji tanpa parameter)"

"Aku ngerti. Iku ora kaget banget. Nanging Jawa serialized kabeh, malah lapangan pribadi."

"Inggih, iku Jawa. Wis akses menyang data sing didhelikake. Sampeyan ora bisa ndhelikake saka dhewe."

"Ana aspek katelu ing kene. Muga-muga sampeyan ngerteni anotasi @JsonAutoDetect ing kelas Cat?"

"Ya, aku mung arep takon apa."

"Iku anotasi: informasi housekeeping kanggo framework Jackson. Kanthi nggunakake annotations tengen, sampeyan duwe cukup akeh kontrol fleksibel liwat asil serialization menyang JSON."

"Keren! Ana anotasi apa?"

"Iki sawetara conto:"

Anotasi Katrangan
@JsonAutoDetect Dipasang ing ngarep kelas.
Tandha kelas minangka siap kanggo serialized menyang JSON.
@JsonNggatekake Diselehake sadurunge properti.
Properti kasebut bakal diabaikan sajrone serialisasi.
@JsonProperty Diselehake sadurunge properti utawa getter utawa setter. Ngidini sampeyan nemtokake jeneng lapangan sing beda sajrone serialisasi.
@JsonWriteNullProperties Dipasang ing ngarep kelas.
Bidang obyek sing null ora bakal diabaikan.
@JsonPropertyOrder Dipasang ing ngarep kelas.
Ngidini sampeyan nemtokake urutan lapangan sajrone serialisasi.

"Carane menarik! Apa ana liyane?"

"Ana akeh. Nanging saiki kita ora bakal nutupi. Saiki ayo gawe maneh conto pisanan kita rada: "

Ngonversi obyek menyang JSON
public static void main(String[] args) throws IOException
{
 Cat cat = new Cat();
 cat.name = "Missy";
 cat.age = 5;
 cat.weight = 4;

 StringWriter writer = new StringWriter();

 ObjectMapper mapper = new ObjectMapper();

 mapper.writeValue(writer, cat);

 String result = writer.toString();
 System.out.println(result);
}
Kelas sing obyek diowahi dadi JSON
@JsonAutoDetect
class Cat
{
 @JsonProperty("alias")
 public String name;
 public int age;
 @JsonIgnore
 public int weight;

 Cat() {
 }
}
Asil serialisasi lan output layar:
{"age":5, "alias":"Missy"}

"Kode kasebut tetep padha, nanging aku ngganti anotasi: Aku nemtokake jeneng liya kanggo lapangan jeneng: alias. Aku uga menehi tandha kolom bobot minangka Ignore, sing nyebabake obyek JSON diganti."

"Iku apik sing bisa ngatur kabeh kaya sing. Aku mesthi bakal nemokake iki migunani."

"Lan deserialization bakal ngerti carane nggarap iki? Nalika deserializing saka JSON kanggo obyek Jawa, Nilai saka lapangan alias bakal ditulis kanggo lapangan jeneng obyek Cat?"

"Ya, deserialization bakal bisa kaya sing dikarepake. Iku pinter."

"Apa ora seneng yen banjur."

"Matur nuwun kanggo pelajaran sing menarik iki, Ellie."