Обычно используемые операции по преобразованию для таких структур, как список и карта, могут в основном удовлетворять большинство потребностей, с которыми мы отвечаем, но иногда в проекте существуют специальные правила формата для JSON. Например, следующий анализ строки JSON:
[{"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":"讲师"}]}]
После анализа мы обнаружили, что обычные методы нелегко справиться с вышеупомянутой строкой JSON. Пожалуйста, посмотрите, как эта статья справляется с этим:
Класс сущности:
импортировать java.util.date; студент открытого класса {Private Int ID; Приватное название строки; частное свидание по случаю дня рождения; 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 (дата рождения) {this.BirthDay = день рождения; } @Override public String toString () {return "Студент [день рождения =" + день рождения + ", id =" + id + ", name =" + name + "]"; }} public Class Seacher {private Int Id; Приватное название строки; Приватная строка название; 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 (строка заголовка) {this.title = title; } @Override public String toString () {return "Учитель [id =" + id + ", name =" + name + ",]"; }}Обратите внимание, что здесь определяется класс объектов TableData:
импортировать java.util.list; открытый класс TableData {Private String TableName; частный список TableData; public String getTableName () {return TableName; } public void cettalableName (String TableName) {this.TableName = tableName; } public List getTableData () {return tableData; } public void settalabledata (list tableData) {this.tabledata = tableData; }} Тестовый класс:
(Внимательно посмотрите на реализацию преобразования JSON обратно в объект. После двух конверсий здесь результат первой перемотки заключается в том, что карта не является объектом, который мы ожидаем. После преобразования карты снова в JSON, а затем преобразование ее в объект. То, что я цитирует, это то, что банка GSON2.1 обычно обрабатывается. Похоже, что использование банки GSON1.
импортировать java.util.arraylist; импортировать java.util.date; импортировать java.util.list; Импорт com.google.gson.gson; Импорт com.google.gson.reflect.typetoken; открытый класс gsontest5 { / ** * @param args * / public static void main (string [] args) {// преобразовать объект в JSON-> Start Student1 = новый студент (); Студент1.setid (1); Student1.setName ("Li Kun"); Студент1.SetBirthDay (New Date ()); Студент Студент2 = новый студент (); Студент2.setid (2); Студент2.setname ("Cao Guisheng"); Студент2.SetBirthDay (новая дата ()); Студент Студент3 = новый студент (); Студент3.setid (3); Студент3.SetName ("Лю бо"); Студент3.SetBirthDay (новая дата ()); Список <Tlade> stulist = new ArrayList <toodTude> (); Stulist.add (Student1); Stulist.add (Student2); Stulist.add (Student3); Учитель учитель1 = новый учитель (); Учитель1.setid (1); Учитель1.SetName («Учитель MI»); Учитель1.SetTitle («Профессор»); Учитель учитель2 = новый учитель (); Учитель2.setid (2); Учитель2.setname («Учитель Дин»); Учитель2.settitle («Лектор»); Список <Semined> Учительский список = новый ArrayList <Semine> (); Учительский список. Адд (Учитель1); Учительский список. Адд (учитель2); TableData TD1 = new TableData (); td1.settablename ("студенты"); td1.settabledata (Stulist); TableData TD2 = new TableData (); td2.settablename («учителя»); td2.settabledata (учительница); Список <AbleData> tdlist = new ArrayList <ableData> (); tdlist.add (td1); tdlist.add (td2); Gson Gson = new Gson (); String s = gson.tojson (tdlist); System.out.println (s); // Результат: [{"TableName": «Студенты», «TableData»: [{«ID»: 1, «Имя»: «Ли Кун», «День рождения»: «22 июня 2012 г. 10:44:16»}, {«id»: 2, «Имя»: «Као Гишенг», «День рождения»: «22 июня 2012 г. 10:44:16:16 Am "}, {" id ": 3," name ":" liu bo "," День рождения ":" 22 июня 2012 г. 10:44:16 утра "}, {" id ": 3," имя ":" Лю бо "," День рождения ":" 22 июня 2012 10:44:16 Am "}]}, {" TableName ":" Учителя "," TableData ": [{" id ": 1," name ":" Учитель Mi "," title ":" профессор "}, {" id ": 2," name ":" Учитель Ding "," title ":" Lecter "}] // // Конвертирование объекта к json //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////// Typetoken <list <tableData >> () {} .getType ()); for (int i = 0; i <tableDatas2.size (); i ++) {tableData entityData = tableDatas2.get (i); String tableName = entityData.getTableName (); Список TableData = entityData.getTableData (); String S2 = gson.tojson (TableData); // System.out.println (S2); // System.out.println (entityData.getData ()); if (tablename.equals ("студенты")) {System.out.println ("Студенты"); List <toold> retstulist = gson.fromjson (s2, new typetoken <list <tood >> () {} .gettype ()); for (int j = 0; j <retstulist.size (); j ++) {System.out.println (retstulist.get (j)); }} else if (tablename.equals ("Учителя")) {System.out.println ("Учителя"); List <bestire> rettchrlist = gson.fromjson (s2, new typetoken <list <учитель >> () {} .gettype ()); for (int j = 0; j <rettchrlist.size (); j ++) {system.out.println (rettchrlist.get (j)); }}} // json преобразуется в объект -> end}}Результат вывода:
[{"TableName": "Студенты", "TableData": [{"id": 1, "name": "li Kun", "День рождения": "22 июня 2012 г. 10:04:12 PM"}, {"id": 2, "Имя": "Cao Guisheng", "День рождения": "22 июня 2012 г. 10:04:12 PM"} ":": ":": ":": ":": ":": ". Bo "," День рождения ":" 22 июня 2012 г. 10:04:12 вечера "}, {" id ": 3," name ":" Лю бо "," День рождения ":" 22 июня 2012 г. 10:04:12 "}]}, {" "Стандарт": «Учителя», «Таблентата»: [{«ID»: 1, имя »: Mi "," title ":" Professor "}, {" id ": 2," name ":" Учитель Ding "," Title ":" Lecturer "}]}] Студент [День рождения = пт 22 июня 22:04:12 CST 2012, ID = 1, имя = Li Kun] [День рождения = FRI 22 июня. 22:04:12 CST 2012, ID = 3, имя = liu bo] Учитель учителя [id = 1, name = учитель Mi, title = профессор] Учитель [id = 2, имя = учитель ding, title = лектор]Зарегистрируйте типовые типы перечисления
Типы перечисления приносят преимущества в нашу программу. Как использовать GSON для достижения обмена с JSON? Пожалуйста, посмотрите эту статью.
Эта статья посвящена тому, как написать SypeDapter самостоятельно, зарегистрировать типографию и обрабатывать типы перечисления.
Класс сущности:
public enum packagestate {воспроизводить, обновлять, обновлять, загружать, загружать,} public class packageitem {private String name; частное состояние упаковки; частный размер строки; public String getName () {return name; } public void setName (string name) {this.name = name; } public packagestate getState () {return state; } public void setState (состояние packagestate) {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 + "]"; }}Напишите конвертер сами, чтобы реализовать интерфейс Jsoneserializer <t> и jsondeserializer <t> интерфейс:
импортировать java.lang.reflect.type; Импорт com.google.gson.jsondeserializationContext; Импорт com.google.gson.jsondeserializer; Импорт com.google.gson.jsonelement; Импорт com.google.gson.jsonparseexception; Импорт com.google.gson.jsonprimity; Импорт com.google.gson.jsonprimity; Импорт com.google.gson.jsoneserializationContext; Импорт com.google.gson.jsonserializer; открытый класс EnumSerializer реализует Jsoneserializer <CackAgeState>, jsondeserializer <CACKAGESTATE> {// Вызывается, когда объект преобразуется в JSON, реализуя JSONSERIALIZE Jsonprimitiate (state.ordinal ()); } // Вызовите, когда объект преобразуется в JSondeserializer <CackAgeState> интерфейс @Override public packagestate deserialize (jsonelement json, type typeoft, jsondeserializationcontext context). Packagestate.values () [json.getasint ()]; вернуть ноль; }}Тестовый класс:
Импорт com.google.gson.gson; Импорт com.google.gson.gsonbuilder; открытый класс 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.setize ("500 м"); item.setState (packagestate.updation); // 这个 состояние 是枚举值 String s = gson.tojson (item); System.out.println (s); System.out.println ("--------------------------------"); Packageitem retitem = gson.fromjson (s, packageitem.class); System.out.println (retitem); }}
Результат вывода (соответствующий тип перечисления состояния был преобразован в тип int в результате):
{"name": "item_name", "state": 2, "size": "500m"} --------------------------------------------- PackageItem [name = item_name, size = 500m, state = updation]