1. Gambaran keseluruhan
Ini adalah artikel ketiga dalam siri mengenai XStream. Sekiranya anda ingin mengetahui tentang penggunaan dasarnya dalam menukar objek Java ke XML dan sebaliknya, lihat artikel sebelumnya.
Di luar kemampuan pengendalian XML, XStream juga dapat mengubah objek Java ke dan dari JSON. Dalam tutorial ini, kita akan belajar mengenai ciri-ciri ini.
2. Prasyarat
Sebelum membaca tutorial ini, baca artikel pertama dalam siri ini , di mana kami menerangkan asas-asas perpustakaan.
3. Kebergantungan
com.thoughtworks.xstream xstream 1.4.5
4. Pemacu JSON
Dalam artikel sebelumnya, kami belajar bagaimana mengatur instance XStream dan memilih pemacu XML. Begitu juga, terdapat dua pemacu yang tersedia untuk menukar objek ke dan dari JSON: JsonHierarchicalStreamDriver dan JettisonMappedXmlDriver .
4.1. JsonHierarchicalStreamDriver
Kelas pemacu ini dapat membuat siri objek ke JSON, tetapi tidak mampu melakukan deserialisasi kembali ke objek. Ia tidak memerlukan pergantungan tambahan, dan kelas pemandunya serba lengkap.
4.2. JettisonMappedXmlDriver
Kelas pemacu ini mampu menukar JSON ke dan dari objek. Dengan menggunakan kelas pemandu ini, kita perlu menambahkan kebergantungan tambahan untuk jettison .
org.codehaus.jettison jettison 1.3.7
5. Menyalurkan Objek kepada JSON
Mari buat kelas Pelanggan :
public class Customer { private String firstName; private String lastName; private Date dob; private String age; private List contactDetailsList; // getters and setters }
Perhatikan bahawa kita telah (mungkin tidak dijangka) mencipta usia sebagai Rentetan . Kami akan menerangkan pilihan ini kemudian.
5.1. Menggunakan JsonHierarchicalStreamDriver
Kami akan memberikan JsonHierarchicalStreamDriver untuk membuat instance XStream.
xstream = new XStream(new JsonHierarchicalStreamDriver()); dataJson = xstream.toXML(customer);
Ini menghasilkan JSON berikut:
{ "com.baeldung.pojo.Customer": { "firstName": "John", "lastName": "Doe", "dob": "1986-02-14 16:22:18.186 UTC", "age": "30", "contactDetailsList": [ { "mobile": "6673543265", "landline": "0124-2460311" }, { "mobile": "4676543565", "landline": "0120-223312" } ] } }
5.2. Pelaksanaan JettisonMappedXmlDriver
Kami akan lulus kelas JettisonMappedXmlDriver untuk membuat instance.
xstream = new XStream(new JettisonMappedXmlDriver()); dataJson = xstream.toXML(customer);
Ini menghasilkan JSON berikut:
{ "com.baeldung.pojo.Customer": { "firstName": "John", "lastName": "Doe", "dob": "1986-02-14 16:25:50.745 UTC", "age": 30, "contactDetailsList": [ { "com.baeldung.pojo.ContactDetails": [ { "mobile": 6673543265, "landline": "0124-2460311" }, { "mobile": 4676543565, "landline": "0120-223312" } ] } ] } }
5.3. Analisis
Berdasarkan output dari dua pemacu, kita dapat melihat dengan jelas bahawa terdapat sedikit perbezaan pada JSON yang dihasilkan. Sebagai contoh, JettisonMappedXmlDriver menghilangkan tanda kutip berganda untuk nilai angka walaupun jenis data adalah java.lang.String :
"mobile": 4676543565, "age": 30,
JsonHierarchicalStreamDriver , sebaliknya, mengekalkan tanda petik berganda.
6. Mendesialisasikan JSON ke Objek
Mari ambil JSON berikut untuk menukarnya kembali ke objek Pelanggan :
{ "customer": { "firstName": "John", "lastName": "Doe", "dob": "1986-02-14 16:41:01.987 UTC", "age": 30, "contactDetailsList": [ { "com.baeldung.pojo.ContactDetails": [ { "mobile": 6673543265, "landline": "0124-2460311" }, { "mobile": 4676543565, "landline": "0120-223312" } ] } ] } }
Ingat bahawa hanya salah satu pemacu ( JettisonMappedXMLDriver ) yang boleh mendeserisasi JSON. Mencuba untuk menggunakanJsonHierarchicalStreamDriver untuk tujuan ini akan menghasilkan UnsupportedOperationException .
Dengan menggunakan pemacu Jettison, kita dapat mendeseralisasikan objek Pelanggan :
customer = (Customer) xstream.fromXML(dataJson);
7. Kesimpulannya
Dalam artikel ini kami telah membahas kemampuan pengendalian JSON XStream, menukar objek ke dan dari JSON. Kami juga melihat bagaimana kami dapat mengubah output JSON kami, menjadikannya lebih pendek, lebih sederhana dan lebih mudah dibaca.
Sama seperti pemprosesan XML XStream, ada cara lain untuk menyesuaikan cara JSON secara bersiri dengan mengkonfigurasi instance, dengan menggunakan anotasi atau konfigurasi program. Untuk perincian dan contoh lebih lanjut, sila rujuk artikel pertama dalam siri ini.
Kod sumber lengkap dengan contoh boleh dimuat turun dari repositori GitHub yang dipautkan.