Am häufigsten verwendete Konvertierungsvorgänge für Strukturen wie Listen und Karte können die meisten Bedürfnisse, die wir erfüllen, im Grunde genommen erfüllen, aber manchmal gibt es im Projekt spezielle Formatvorschriften für JSON. Zum Beispiel die folgende JSON -String -Parsen:
[{"tableName":"students","tableData":[{"id":1,"name":"李坤","birthDay":"Jun 22, 2012 9:54:49 PM"},{"id":2,"name":"曹贵生","birthDay":"Jun 22, 2012 9:54:49 PM"},{"id":3,"name":"柳波","birthDay":"Jun 22, 2012 9:54:49 PM"}]},{"tableName":"teachers","tableData":[{"id":1,"name":"米老师","title":"教授"},{"id":2,"name":"丁老师","title":"讲师"}]}]
Nach der Analyse fanden wir, dass gewöhnliche Methoden nicht einfach mit der obigen JSON -Zeichenfolge umgehen können. Bitte beachten Sie, wie dieser Artikel damit umgeht:
Entitätsklasse:
import Java.util.date; Student der öffentlichen Klasse {private int id; privater Zeichenfolge Name; Privatdatum Geburtstag; public int getid () {return id; } public void setId (int id) {this.id = id; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public date getBirthday () {Return Birthday; } public void setBirthday (Datum Geburtstag) {this.birthday = Geburtstag; } @Override public String toString () {return "student [birthday =" + birthday + ", id =" + id + ", name =" + name + "]"; }} öffentlicher Klassenlehrer {private int id; privater Zeichenfolge Name; privater String -Titel; public int getid () {return id; } public void setId (int id) {this.id = id; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public String gettitle () {return title; } public void settitle (String title) {this.title = title; } @Override public String toString () {return "lehrer [id =" + id + ", name =" + name + ",]"; }}Beachten Sie, dass hier eine Einrichtungsklasse definiert ist:
importieren java.util.list; public class fortzieldata {private String tableName; private liste formtedata; public String gettableName () {return tableName; } public void settableName (String tableName) {this.tableName = tableName; } publiclist gettabledata () {return tabledata; } public void sontabledata (list tabledata) {this.tabledata = tabledata; }} Testklasse:
(Schauen Sie sich die Implementierung von JSON wieder in ein Objekt an. Nach zwei Konvertierungen hier ist das Ergebnis des ersten Rückspannens nicht das Objekt, das wir erwarten. Nach dem Umwandeln von Map in JSON und dann erneut in ein Objekt in ein Objekt. Was ich zitiert habe, ist, dass das Glas von GSON2.1 normal behandelt wird.
Import Java.util.ArrayList; import Java.util.date; importieren java.util.list; import com.google.gson.gson; import com.google.gson.reflect.typepeken; public class gsontest5 { / ** * @param args * / public static void main (String [] args) {// das Objekt in JSON-> starten student student1 = new student (); student1.setid (1); Student1.SetName ("Li Kun"); student1.setBirthday (neues Datum ()); Student student2 = neuer student (); student2.setid (2); Student2.SetName ("Cao Guisheng"); student2.setBirthday (neues Datum ()); Student student3 = neuer student (); Student3.Setid (3); Student3.SetName ("Liu Bo"); Student3.SetBirthday (neues Datum ()); LIST <Student> stulist = new ArrayList <Student> (); stulist.add (student1); stulist.add (student2); stulist.add (student3); Lehrer Lehrer1 = neuer Lehrer (); Teacher1.Setid (1); Teacher1.SetName ("Lehrer MI"); Teacher1.Settitle ("Professor"); Lehrer Teacher2 = neuer Lehrer (); Teacher2.setID (2); Teacher2.SetName ("Lehrer Ding"); Teacher2.Settitle ("Dozent"); LIST <Lacher> lehrerlist = new ArrayList <Arner> (); TeacherList.Add (Lehrer1); TeacherList.Add (Lehrer2); Tabldata td1 = new tabledata (); td1.settableName ("Studenten"); TD1.Settabledata (Stulist); Tabldata td2 = new tabledata (); td2.settableName ("Lehrer"); td2.Settabledata (Lehrerliste); Liste <Tabledata> tdlist = new ArrayList <Tabledata> (); tdlist.add (td1); tdlist.add (td2); Gson gson = new gson (); String S = gson.tojson (tdlist); System.out.println (s); // Ergebnis: [{"tableName": "Studenten", "gerettet": [{"ID": 1, "Name": "Li Kun", "Geburtstag": "22. Juni 2012, 10:44:16 Uhr"}, {"ID": 2, "Name": "Cao Guisheng", "Geburtstag": ":": ":": ":": ":": ":" 10.44:44:16:16 ",": ":": ":" 22.20. AM "}, {" ID ": 3," Name ":" Liu bo "," Geburtstag ":" 22. Juni 2012, 10:44:16 Uhr "}, {" ID ": 3," Name ":" Liu Bo "," Geburtstag ":" 22. Juni 2012 10:44:16 AM "}]}, {" TableName ":" Lehrer "," fordertata ": [{" id ": 1," name ":" lehrer mi "," title ":" professor "}, {" id ": 2," name ":" lehrer ding "," title ":" decturer "}] // convertieren Sie den Objekt zu json-ende" ende ". //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////// TypEToken <list <tabldata >> () {} .GetType ()); für (int i = 0; i <tabledatas2.size (); i ++) {tabldata entityData = tabledatas2.get (i); String tablename = entityData.gettAsame (); List tabledata = entityData.gettabledata (); String s2 = gson.tojson (tabldata); // system.out.println (S2); // system.out.println (EntityData.getData ()); if (tableName.equals ("Studenten") {System.out.println ("Studenten"); List <Student> retstulist = gson.fromjson (S2, New TypEToken <list <student >> () {} .GetType ()); für (int j = 0; j <retstulist.size (); j ++) {System.out.println (retstulist.get (j)); }} else if (tableName.equals ("lehrer") {System.out.println ("Lehrer"); List <Arter> rettchrlist = gson.fromjson (S2, New TypEToken <list <lehrer >> () {} .GetType ()); für (int j = 0; j <rettchrlist.size (); j ++) {System.out.println (rettchrlist.get (j)); }}} // json wird in ein Objekt konvertiert -> Ende}}Ausgangsergebnis:
[{"tableName":"students","tableData":[{"id":1,"name":"Li Kun","birthDay":"Jun 22, 2012 10:04:12 PM"},{"id":2,"name":"Cao Guisheng","birthDay":"Jun 22, 2012 10:04:12 PM"},{"id":3,"name":"Liu BO "," Geburtstag ":" 22. Juni 2012, 10:04:12 Uhr "}, {" ID ": 3," Name ":" Liu bo "," Geburtstag ":" 22. Juni 2012, 10:04:12 PM "}]}, {" tablename ":" Lehrer "," formata ": [" Id ": 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1," name ":" name ":" name ":" name ":" name ":" name ":" name ":" name ":" name ":" name ":" name ":" Mi "," Titel ":" Professor "}, {" id ": 2," Name ":" Lehrer Ding "," Titel ":" Dozent "}]}] Studenten Schüler [Geburtstag = Fri 22. Juni 22.04:04:12 CST 2012, ID = 1, Name = Li Kun] Student [Geburtstag = Fri. 22:04:12 CST 2012, id = 3, name = liu bo] Lehrerlehrer [ID = 1, Name = Lehrer MI, Titel = Professor] Lehrer [ID = 2, Name = Lehrer Ding, Titel = Dozent]Registrieren
Aufzählungstypen bringen unserem Programm Vorteile. Wie benutzt ich GSON, um den Austausch mit JSON zu erreichen? Bitte beachten Sie diesen Artikel.
Dieser Artikel konzentriert sich darauf, wie Sie selbst einen Typenadapter schreiben, Typeadapter registrieren und Enum -Typen behandeln.
Entitätsklasse:
public enum packagestate {spielen, aktualisieren, aktualisieren, herunterladen, herunterladen,} paketItem {private String -Name; Privatpackungsstaat; private Saitengröße; public String getName () {return name; } public void setName (String -Name) {this.name = name; } public packagestate getState () {return state; } public void setState (packagestate state) {this.state = STAAT; } public String getSIZE () {Return Size; } public void setSize (Stringgröße) {this.size = Größe; } @Override public String toString () {return "packageItem [name =" + name + ", size =" + size + ", state =" + state + "]"; }}Schreiben Sie selbst einen Konverter, um die Schnittstelle von JsonSerializer <T> und JSondesserializer <T> zu implementieren.
importieren java.lang.reflect.type; import com.google.gson.jsondeserializationContext; import com.google.gson.jsondeserializer; import com.google.gson.jsonElement; import com.google.gson.jsonParseException; import com.google.gson.jsonPrimitive; import com.google.gson.jsonPrimitive; import com.google.gson.jsonserializationContext; import com.google.gson.jsonserializer; public class EnumSerializer implements JsonSerializer<PackageState>, JsonDeserializer<PackageState> { // Called when the object is converted to Json, implementing JsonSerializer<PackageState> interface @Override public JsonElement serialize(PackageState state, Type arg1, JsonSerializationContext arg2) { return new JsonPrimitive (state.ordinal ()); } // aufgerufen, wenn das Objekt in jSondesserializer <Packagestate> interface @Override public packagestate Deserialize (JsonElement JSON, Type typoft, jSonderializationContext -Kontext) konvertiert wird. Packagestate.Values () [json.getasint ()]; null zurückkehren; }}Testklasse:
import com.google.gson.gson; import com.google.gson.gsonBuilder; public class gsontest6 {public static void main (String [] args) {gsonBuilder gsonBuilder = new gsonBuilder (); gsonBuilder.registerTypeadapter (packagestate.class, New EnumSerializer ()); Gson gson = gsonBuilder.create (); PackageItem item = new PackageItem (); item.setName ("item_name"); item.setSize ("500 m"); item.setState (packagestate.updating); // 这个 Status 是枚举值 String s = gson.tojson (item); System.out.println (s); System.out.println ("--------------------------------"); PackageItem retitem = gson.fromjson (s, packageItem.class); System.out.println (Retitem); }}
Ausgabeergebnis (der entsprechende Zustandstyp des Zustands wurde im Ergebnis in Int -Typ konvertiert):
{"name":"item_name","state":2,"size":"500M"} ----------------------------------------- PackageItem [name=item_name, size=500M, state=UPDATING]