Les opérations de conversion couramment utilisées pour des structures telles que la liste et la carte peuvent essentiellement répondre à la plupart des besoins que nous gérons, mais parfois il existe des réglementations de format spécial pour JSON dans le projet. Par exemple, l'analyse de chaîne JSON suivante:
[{"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":"讲师"}]}]
Après analyse, nous avons constaté que les méthodes ordinaires ne sont pas faciles à gérer la chaîne JSON ci-dessus. Veuillez voir comment cet article le gère:
Classe d'entité:
Importer java.util.date; Étudiant de classe publique {private int id; nom de chaîne privé; anniversaire de rendez-vous privé; public int getID () {return id; } public void setid (int id) {this.id = id; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } Public Date getBirthday () {retour anniversaire; } public void SetBirthday (date d'anniversaire) {this.birthday = anniversaire; } @Override public String toString () {return "Student [anniversaire =" + anniversaire + ", id =" + id + ", name =" + name + "]"; }} Public Class Teacher {private int id; nom de chaîne privé; titre de chaîne privée; public int getID () {return id; } public void setid (int id) {this.id = id; } public String getName () {Nom de retour; } 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 "enseignant [id =" + id + ", name =" + name + ",]"; }}Notez qu'une classe d'entité TableData est définie ici:
Importer java.util.list; classe publique TableData {private String TableName; Liste privée TableData; public String getTableName () {return TableName; } public void SettableName (String TableName) {this.tableName = tableName; } public list getTableData () {return TableData; } public void SettableData (list TableData) {this.TableData = TableData; }} Classe de test:
(Regardez attentivement la mise en œuvre de la conversion de JSON à un objet. Après deux conversions ici, le résultat du premier rembobinage est que la carte n'est pas l'objet que nous attendons. Après avoir converti la carte en JSON.
import java.util.arraylist; Importer java.util.date; Importer java.util.list; import com.google.gson.gson; Importer com.google.gson.reflect.Typetoken; classe publique GSonTest5 {/ ** * @param args * / public static void main (String [] args) {// convertir l'objet en json -> start étudiant étudiant1 = new student (); Student1.setid (1); Student1.setName ("Li kun"); Student1.setBirthday (new Date ()); Student Student2 = New Student (); Student2.SetId (2); Student2.SetName ("Cao Guiseng"); Student2.SetBirthday (new Date ()); Student Student3 = New Student (); Student3.setid (3); Student3.SetName ("Liu Bo"); Student3.SetBirthday (new Date ()); Liste <Student> Stulist = new ArrayList <Student> (); Stulist.Add (Student1); Stulist.add (Student2); Stulist.add (Student3); Enseignant enseignant 1 = nouveau professeur (); Teacher1.setid (1); Teacher1.setName ("Teacher Mi"); Teacher1.settitle ("professeur"); Enseignant enseignant2 = nouveau professeur (); Teacher2.setid (2); Teacher2.SetName ("Teacher ding"); Teacher2.SetTitle ("professeur"); List <eacher> TeacherList = new ArrayList <Seacher> (); TeacherList.Add (Teacher1); TeacherList.Add (Teacher2); TableData td1 = new TableData (); td1.setTableName ("étudiants"); td1.setTabledata (Stulist); TableData td2 = new TableData (); td2.setTableName ("enseignants"); td2.setTableData (enseignante); List <TableData> tdlist = new ArrayList <Tabledata> (); tdlist.add (td1); tdlist.add (td2); Gson gson = new gson (); String s = gson.tojson (tdlist); System.out.println (s); Cette Suis "}, {" id ": 3," nom ":" liu bo "," anniversaire ":" 22 juin 2012 10:44:16 AM "}, {" id ": 3," nom ":" Liu Bo "," anniversaire ":" 22 juin 2012 10:44:16 Je suis "}]}, {" TableName ":" Teachers "," Tabledata ": [{" id ": 1," name ":" Teacher mi "," title ":" Professor "}, {" id ": 2," name ":" Teacher ding "," title ":" leder "}]}] // convertir l'objet à json -> end // //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////// TypeToken <list <Tabledata >> () {} .getType ()); for (int i = 0; i <teabledatas2.size (); i ++) {TableData entityData = TableDatas2.get (i); String TableName = entityData.getTableName (); List tentableData = entityData.getTabledAdAt (); String s2 = gson.tojson (TableData); // System.out.println (S2); // System.out.println (entityData.getData ()); if (tableName.equals ("étudiants")) {System.out.println ("étudiants"); List <Student> retstulist = gson.fromjson (s2, new TypeToken <list <Student>> () {} .getType ()); pour (int j = 0; j <redstulist.size (); j ++) {System.out.println (retstulist.get (j)); }} else if (tableName.equals ("Teachers")) {System.out.println ("Teachers"); List <Degending> RetTchrList = gson.fromjson (S2, new TypeToken <list <eacher >> () {} .getType ()); for (int j = 0; j <rettchrlist.size (); j ++) {System.out.println (rettchrlist.get (j)); }}} // json est converti en un objet -> fin}}Résultat de sortie:
[{"tablename": "étudiants", "Tabledata": [{"id": 1, "nom": "li kun", "anniversaire": "22 juin 2012 10:04:12 PM"}, {"id": 2, "nom": "Cao Guiseng", "anniversaire": "22 juin 10:04:12 Bo "," anniversaire ":" 22 juin 2012 10:04:12 "}, {" id ": 3," nom ":" liu bo "," anniversaire ":" 22 juin 2012 10:04:12 PM "}]}, {" TableName ":" Teachers "," Tabledata ": [{" id ": 1," nom ":" Teachers " Mi "," titre ":" professeur "}, {" id ": 2," nom ":" Teacher ding "," title ":" conférencier "}]}] Étudiant étudiant [anniversaire = ven 22 juin 22:04:12 CST 2012, id = 1, nom = li kun] étudiant [anniversaire = Fri juin 22 22:04:12 CST 2012, id = 2, nom = Cao GUOSH] Étudiant = FRI JUNC 22:04:12 CST 2012, id = 3, name = liu bo] enseignant enseignant [id = 1, nom = professeur mi, title = professeur] enseignant [id = 2, nom = enseignant ding, title = conférencier]Enregistrez TypeAdapter et manipulez les types d'énumération
Les types d'énumération apportent des avantages à notre programme. Comment utiliser GSON pour réaliser un échange avec JSON? Veuillez consulter cet article.
Cet article se concentre sur la façon de rédiger un TypeAdapter vous-même, de vous inscrire TypeAdapter et de gérer les types d'énumération.
Classe d'entité:
Public Enum packAgestate {play, mise à jour, mise à jour, téléchargement, téléchargement,} classe publique packageItem {nom de chaîne privée; État de packagestate privé; taille de chaîne privée; public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public packAgestate getState () {return State; } public void setState (packAgestate State) {this.state = state; } public String getSize () {return size; } public void setSize (string size) {this.size = size; } @Override public String toString () {return "packageItem [name =" + name + ", size =" + size + ", state =" + state + "]"; }}Écrivez vous-même un convertisseur pour implémenter l'interface JSonSerializer <T> et l'interface JSonSeSerializer <T>:
import 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; classe publique Enumserializer implémente JSonSerializer <PackageState>, JSonSeSerializer <PackageState> {// appelé lorsque l'objet est converti en JSON, implémentant JSonserializer <Packagestate> Interface @OverrideContext Serialize (Retour New New JSONPRIMITIF (State.OrDinal ()); } // appelé lorsque l'objet est converti à l'interface JSonSerializer <PackAgestate> @Override public PackAgEstate Deerialize (JSONElement JSON, TypeToft, JSonSeSerializationContext Context) lance JSONPaSeException {if (json.getasint () <PackageState.Values (). Longueur) PackAgEstate.Values () [json.getAntInt ()]; retourner null; }}Classe de test:
import com.google.gson.gson; import com.google.gson.gsonbuilder; classe publique 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 ("500m"); item.setState (packAgestate.updating); // 这个 état 是枚举值 String s = gson.tojson (item); System.out.println (s); System.out.println ("--------------------------------"); PackageItem reItem = gson.fromjson (s, packageItem.class); System.out.println (retitem); }}
Résultat de sortie (le type d'énumération correspondant de l'état a été converti en type int dans le résultat):
{"name": "item_name", "état": 2, "size": "500m"} ----------------------------------------- packagetem [name = item_name, size = 500m, state = updating]