GSON (Github: https://github.com/google/gson) adalah perpustakaan kelas Java yang disediakan oleh Google untuk pemetaan antara objek Java dan data JSON. Anda dapat mengubah string JSON menjadi objek Java, atau sebaliknya.
Objek terpenting di GSON adalah 2 GSONS dan GSONBUILDERS.
GSON memiliki 2 metode paling dasar (1) TOJSON () untuk mengonversi objek Java menjadi JSON
(2) fromjson () mengubah JSON menjadi objek Java
Tulis kelas entitas:
People Public Class {String Name; usia int; setname boolean; public string getName () {return name; } public void setName (name string) {this.name = name; } public int getage () {usia kembali; } public void setage (int usia) {this.age = usia; } public boolean getSetName () {return setName; } public void setSetName (boolean setName) {this.setName = setName; } @Override Public String ToString () {return "name =" + name + "Age =" + usia + "setName =" + setName; }}Tulis kelas tes GSontest
impor com.google.gson.exclusionstrategy; import com.google.gson.fieldattributes; import com.google.gson.gson; import com.google.gson.gsonbuilder;/*** Konversi objek java menjadi json. */kelas publik gSontest {public static void main (string [] args) {people p = new people (); p.setage (20); p.setname ("orang"); p.setsetname (true); GSON GSON = GSON baru (); System.out.println (gson.toJson (p)); }}Hasil output:
{"Name": "People", "Age": 20, "SetName": True}Ini hanya cara termudah untuk menggunakan GSON. Bagaimana cara mengimplementasikannya jika kita perlu mengonversi atribut setName dari tipe bool untuk tidak mengonversi saat mengubahnya menjadi JSON?
Setelah mencari dalam paket GSON untuk waktu yang lama, saya menemukan bahwa ada antarmuka di bawah paket com.google.gson: Excupionstrategy. Meskipun saya tidak tahu apa fungsinya, berdasarkan namanya, dapat disimpulkan bahwa antarmuka ini digunakan untuk mengatur strategi pengecualian untuk konversi GSON. Jadi saya memeriksa antarmuka ini di situs web resmi http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html dan menemukan bahwa selama antarmuka ini diimplementasikan dan objek dari kelas pelapis akan diisi ke gson, ketika konversi, Gson akan diisi. Jadi kode berikut adalah:
Impor com.google.gson.exclusionstrategy; import com.google.gson.fieldattributes; import com.google.gson.gson; import com.google.gson.gsonbuilder;/*** Konversi objek java menjadi json, lewati file spesifik. */kelas publik gSontest {public static void main (string [] args) {people p = new people (); p.setage (20); p.setname ("orang"); p.setsetname (true); EXCLUSIONSTRATEGT Excudestry = New SetterexClusionstrategy (); GSON GSON1 = GSONBUILDER baru () .setExclusionstrategy (Excudestrate) .create (); GSON GSON2 = GSON baru (); String json1 = gson1.toJson (p); String json2 = gson2.toJson (p); System.out.println (json1); System.out.println (json2); People p1 = gson1.fromjson (json1, people.class); People p2 = gson2.fromjson (json2, people.class); System.out.println (P1); System.out.println (P2); } private static class SetTeExClusionstrategy mengimplementasikan Exclusionstrategy {public boolean seharusnyaskipclass (class <?> clazz) {return false; } public boolean OUSTSKIPField (fieldAttributes f) {return f.getName (). startswith ("set"); }}}Ternyata ada dua cara untuk membuat objek GSON: GSON baru () berarti membuat objek GSON menggunakan konfigurasi default, dan jika dibuat menggunakan metode gsonBuilder.create (), Anda dapat menyesuaikan beberapa pengaturan, terutama untuk membuat GSON yang dibuat lebih sesuai untuk situasi tertentu. Kode biru pertama dalam contoh di atas membuat objek GSON, yang memiliki konfigurasi properti penyaringan yang dimulai dengan kata "set" (jika Anda perlu memfilter jenis tertentu, Anda dapat menulis ulang metode Object Strategy (Kelas?> Oleh karena itu, dalam contoh ini, ketika mengonversi objek orang menjadi JSON, setName atribut akan disaring. Karena tidak ada atribut setName di JSON1, ketika deserialization JSON1 menjadi Object People, setname dari tipe Boolean tidak memiliki nilai, jadi saat mencetak, nilai default tipe Boolean diambil. Jadi hasil berikut diperoleh:
{"Name": "People", "Age": 20} {"Name": "People", "Age": 20, "SetName": True} Name = People Age = 20 SetName = Falsename = People Age = 20 SetName = TrueGSON juga mendukung penggunaan anotasi. Dalam paket com.google.gson.annotation, ada beberapa anotasi terpapar, serializedName, karena dan sampai. Mereka masing -masing memiliki fungsi sendiri. Berikut ini adalah contoh resmi untuk memperkenalkan anotasi yang umum digunakan:
Membuka:
Anotasi ini bertindak pada atribut, menunjukkan bahwa ketika serialisasi dan deserialized, atribut ini akan terpapar pada objek GSON. Anotasi ini hanya valid ketika objek GSON dibuat menggunakan metode GSONBUILDER dan metode GSONBUILDER.EXCLUDEFIELDSWithOutExpineAnnotation () dipanggil, jika tidak itu tidak valid. Berikut adalah contoh yang memperkenalkan cara menggunakan anotasi @terpapar:
Pengguna kelas publik { @Expose Private String FirstName; @Expose (serialize = false) Private String LastName; @Expose (serialize = false, deserialize = false) private string emailAddress; kata sandi string pribadi;}Jika Anda membuat objek GSON dalam metode GSON () baru, metode TOJSON () dan dari Metode dariJSON () akan mengoperasikan 4 properti ini saat membuat serial dan deserialisasi. Namun, jika Anda menggunakan GSON GSON = GSONBUILDER baru (). ExcudefieldswithoutExposeanNotation (). Create () untuk membuat objek GSON, metode GSON's ToJson () dan dari JSNSON () akan mengecualikan bidang kata sandi, karena bidang kata sandi tidak ditandai dengan anotasi @expose @expose. Objek GSON ini juga akan mengecualikan bidang LastName dan EmailAddress, karena atribut Serialize @Expose diatur ke false. Demikian pula, GSON akan mengecualikan bidang EmailAddress selama deserialisasi karena Deserialize diatur ke False.
SerializedName:
Anotasi ini digunakan pada atribut, menunjukkan bahwa ketika atribut ini diserialisasi ke dalam JSON, nama perlu diserialisasi ke dalam nilai yang ditentukan oleh atribut nilai anotasi.
Anotasi ini akan mengesampingkan setiap fieldnamingpolicy, termasuk kebijakan penamaan default. Berikut adalah contoh yang memperkenalkan bagaimana anotasi @serializedName digunakan:
kelas publik someclasswithfields {@serializedName ("name") private final string somefield; string final private someotherfield; publik someclasswithfields (string a, string b) {this.somefield = a; this.someotherfield = b; }}Kode berikut menunjukkan hasil serialisasi kelas tes di atas:
Someclasswithfields objecttoSerialize = new someclasswithfields ("a", "b"); gson gson = baru gson (); string jsonrepresentation = gson.toJson (objecttoserialize); System.out.println (jsonrepresentation);Hasil eksekusi adalah:
{"name": "a", "someotherfield": "b"}Dapat dilihat bahwa properti "Somefield" telah diserialisasi menjadi "nama".
Catatan: Nama atribut yang ditentukan dalam nilai @serializedName harus berupa nama atribut JSON yang valid.