"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."
"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:"
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);
}
@JsonAutoDetect
class Cat
{
public String name;
public int age;
public int weight;
Cat(){}
}
{"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:"
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);
}
@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: "
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);
}
@JsonAutoDetect
class Cat
{
@JsonProperty("alias")
public String name;
public int age;
@JsonIgnore
public int weight;
Cat() {
}
}
{"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."
GO TO FULL VERSION