목록 및지도와 같은 구조에 일반적으로 사용되는 전환 작업은 기본적으로 우리가 처리하는 대부분의 요구를 충족시킬 수 있지만 때로는 프로젝트에 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 문자열을 다루기가 쉽지 않다는 것을 발견했습니다. 이 기사를 어떻게 처리하는지보십시오.
엔티티 클래스 :
import 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 (문자열 이름) {this.name = 이름; } 공개 날짜 getBirthday () {return birthday; } public void setbirthday (날짜 생일) {this.birthday = 생일; } @override public String toString () {return "return"student [withy [recture [le + girthment + ", id =" + id + ", name =" + name + "]"; }} 공개 클래스 교사 {private int id; 개인 문자열 이름; 개인 문자열 제목; public int getid () {return id; } public void setid (int id) {this.id = id; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public string getTitle () {return title; } public void settitle (문자열 제목) {this.title = title; } @override public String toString () {return "교사 [id =" + id + ", name =" + name + ",]"; }}Tabledata Entity 클래스는 여기에 정의되어 있습니다.
Java.util.list 가져 오기; 공개 클래스 tabledata {private String tablename; 비공개 목록 TableData; public String getTablename () {return tablename; } public void settableName (String tableName) {this.tableName = tableName; } 공개 목록 getTableData () {return tabledata; } public void settabledata (list tabledata) {this.tabledata = tabledata; }} 테스트 클래스 :
(JSON을 객체로 다시 변환하는 것의 구현을주의 깊게 살펴보십시오. 여기서 두 번의 변환 후, 첫 번째 되감기의 결과는 맵을 다시 JSON으로 변환 한 후 맵을 객체로 변환 한 후 gson2.1의 항아리가 정상적으로 다루어 졌다는 것입니다. gson1.6의 항아리를 사용하여 최신 버전을 사용하는 것이 좋습니다.
java.util.arraylist 가져 오기; import java.util.date; Java.util.list 가져 오기; import com.google.gson.gson; import com.google.gson.reflect.typetoken; 공개 클래스 gsontest5 { / ** * @param args * / public static void main (String [] args) {// 객체를 json으로 변환합니다-> Start Student1 = new Student (); Student1.SetId (1); Student1.SetName ( "Li Kun"); Student1.setbirthday (새 날짜 ()); 학생 2 = 신입생 (); Student2.SetId (2); Student2.SetName ( "Cao Guisheng"); Student2.setbirthday (new date ()); 학생 3 = 신입생 (); Student3.setId (3); Student3.setName ( "liu bo"); Student3.setbirthday (new date ()); List <tudent> stulist = new ArrayList <student> (); stulist.add (학생 1); stulist.add (학생 2); stulist.add (학생 3); 교사 교사 1 = 새로운 교사 (); 교사 1.setId (1); 교사 1. 세트 이름 ( "교사 mi"); 교사 1. 세트 타이틀 ( "교수"); 교사 교사 2 = 새로운 교사 (); 교사 2.SetId (2); 교사 2.setName ( "교사 딩"); 교사 2.SetTitle ( "강사"); List <peacher> el TeacherList.add (교사 1); Teacherlist.add (교사 2); tabledata td1 = new tabledata (); td1.settablename ( "학생"); td1.settabledata (Stulist); tabledata td2 = new tabledata (); td2.settablename ( "교사"); td2.settabledata (Teacherlist); 목록 <pabledata> tdlist = new arraylist <tabledata> (); tdlist.add (td1); tdlist.add (td2); GSON GSON = NEW GSON (); 문자열 s = gson.tojson (tdlist); System.out.println (s); // 결과 : [{ "TableName": "Student", "Tabledata": [{ "id": 1, "name": "li kun", "생일": "2012 년 6 월 22 일 10:44:16 AM"}, { "ID": "이름": "Cao Guisheng", "생일": "Jun 22, 2012 10:44:16. am "}, {"id ": 3,"name ":"liu bo ","생일 ":"2012 년 6 월 22 일 10:44:16 am "}, {"id ": 3,"name ":"liu bo ","생일 ":"2012 년 6 월 22 일 10:44:16 am "}]}, {"tablemename ":"tablename ","tabledata ": [{"id ": 1,"name ":"교사 mi ","Teacher Mi ","Title ":"Teacher "}, {"ID ":"2, "이름": "교사 딩", "title": "lecturer"}]}] // JSON-> end // //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////// typetoken <list <tabledata >> () {} .getType ()); for (int i = 0; i <tableDatas2.size (); i ++) {tabledata entityData = tableDatas2.get (i); 문자열 tableName = entityData.getTableName (); list tabledata = entityData.getTableData (); 문자열 s2 = gson.tojson (tabledata); // System.out.println (S2); // system.out.println (entityData.getData ()); if (tableName.equals ( "학생")) {System.out.println ( "학생"); 목록 <tudent> retstulist = gson.fromjson (s2, new typetoken <list <student>> () {} .getType ()); for (int j = 0; }} else if (tableName.equals ( "교사")) {System.out.println ( "교사"); 목록 <peacher> rettchrlist = gson.fromjson (s2, new typetoken <list <proller>> () {} .getType ()); for (int j = 0; }}} // json은 객체로 변환됩니다 -> end}}출력 결과 :
[{ "tableName": "학생", "tableData": [{ "id": 1, "name": "li kun", "생일": "2012 년 6 월 22 일 10:04:12 pm"}, { "id": "2,"이름 ":"Cao Guisheng ","생일 ":"Jun 22, 2012 10:04:12 PM "}," ": 3," "": 3, 3, "" ": 보 ","생일 ":"2012 년 6 월 22 일 10:04:12 pm "}, {"id ": 3,"name ":"liu bo ","생일 ":"2012 년 6 월 22 일 10:04:12 pm "}}, {"tablemename ":"교사 ","탁자 ":"id ": 1," "이름": ""이름 ":"이름 ":"Tablemename mi ","title ":"교수 "}, {"id ": 2,"name ":"교사 딩 ","제목 ":"강사 "}]}] 학생 [생일 = fri 6 월 22:04:12 CST 2012, ID = 1, 이름 = li kun] 학생 [생일 = fri 6 월 22:04:12 CST 2012, Id = 2, guisheng [cao guisheng. 22:04:12 CST 2012, ID = 3, name = liu bo] 교사 교사 [id = 1, name = 교사 mi, 제목 = 교수] 교사 [id = 2, name = 교사 딩, 제목 = 강사]타이프 테이프터를 등록하고 열거 유형을 핸들하십시오
열거 유형은 프로그램에 혜택을 제공합니다. GSON을 사용하여 JSON과의 교환을 달성하는 방법은 무엇입니까? 이 기사를 참조하십시오.
이 기사는 타이프 apter를 직접 작성하고, 타이프 디프터를 등록하며, 열거 형식 유형을 처리하는 방법에 중점을 둡니다.
엔티티 클래스 :
public enum packagestate {재생, 업데이트, 업데이트, 다운로드, 다운로드,} public class packageitem {private String name; 개인 Packagestate 상태; 개인 문자열 크기; 공개 문자열 getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public packagestate getState () {return state; } public void setstate (packagestate state) {this.state = state; } public String getSize () {return size; } public void setsize (문자열 크기) {this.size = size; } @override public String toString () {return "packageItem [name =" + name + ", size =" + size + ", state =" + state + "]; }}jsonserializer <t> 인터페이스 및 jsondeserializer <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; 공공 클래스 열거자는 JSONSERIALIZER <PACKAGESTATE>, JSONDESERIALIZER <PACKAGESTATE> {// 객체가 JSON으로 변환 될 때 호출, JSONSERIALIZER <PACKAGESTATE> interface @Override public jsonElement Serialize (Packagestate State, Type Arg1, Jsonserialization Contect Contecontecontecontecontecontecontecontecontecontecontecontecontecontecontecontecontecconteconteconteccontecconteccont jsonprimitive (state.ordinal ()); } // 객체가 jsondeserializer <Packagestate> interface @Override public packagestate deserialize (jsonElement JSON, Type Type, JSONDESERIALIDIZECCONTEXT CONTEXT)로 변환 될 때 호출됩니다. packagestate.values () [json.getasint ()]; 널 리턴; }}테스트 클래스 :
import com.google.gson.gson; import 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.setsize ( "500m"); item.setstate (packagestate.updating); // 这个 state string s = gson.tojson (항목); 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=UPDATING]