AndroidのGsonの使い方、Json構造間の相互変換を実現


一、配列、対象、List、Map等のデータ構造をJson文字列に変換する
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;


public class Main {

	public static class Student{
		    private String name;
		    int age;
		    private String address;
		    
		    private Date dateOfBirth;
		    public Student() {
		    }
		    public Student(String name ,int age,String address, Date dateOfBirth) {
		        this.name = name;
		        this.age=age;
		        this.address = address;
		        this.dateOfBirth = dateOfBirth;
		    }
		    
		    public int getAge() {
				return age;
			}
			public void setAge(int age) {
				this.age = age;
			}
			public String getName() {
		        return name;
		    }
		    public void setName(String name) {
		        this.name = name;
		    }
		    public String getAddress() {
		        return address;
		    }
		    public void setAddress(String address) {
		        this.address = address;
		    }
		    public Date getDateOfBirth() {
		        return dateOfBirth;
		    }
		    public void setDateOfBirth(Date dateOfBirth) {
		        this.dateOfBirth = dateOfBirth;
		    }
	}
	public static void main(String[] args) {
		 Gson gson=new Gson();
		
		/*     Json */
		 int[] numbers = {1, 1, 2, 3, 5, 8, 13};
	     String[] days = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
	     String numbersJson=gson.toJson(numbers);
	      String daysJson = gson.toJson(days);  
	      System.out.println("     Json   :");
	      System.out.println("numbersJson = " + numbersJson);
	      System.out.println("daysJson = " + daysJson);
	     
	     
	     /*List   Json ,      */	     
	     List names = new ArrayList();
	        names.add("Alice");
	        names.add("Bob");
	        names.add("Carol");
	        names.add("Mallory");
	     String jsonNames = gson.toJson(names);
	     System.out.println("List   Json ,      ");
	     System.out.println("jsonNames = " + jsonNames);   
	     
	     
	     /*List   Json ,     */	    
	    Student a = new Student("Alice", 20,"Apple St", new Date(2000, 10, 1));
	    Student b = new Student("Bob", 23,"Banana St", null);
	    Student c = new Student("Carol",42, "Grape St", new Date(2000, 5, 21));
	    Student d = new Student("Mallory",24, "Mango St", null);

	    List students = new ArrayList();
	     students.add(a);
	     students.add(b);
	     students.add(c);
	     students.add(d);
	     String jsonStudents = gson.toJson(students);
	     System.out.println("List   Json ,     ");
	     System.out.println("jsonStudents = " + jsonStudents);
	     // Converts JSON string into a collection of Student object.	    
	     Type type = new TypeToken>(){}.getType();
	     System.out.println("Json    List,     ");
	     List studentList = gson.fromJson(jsonStudents, type);

	     for (Student student : studentList) {
	            System.out.println("student.getName() = " + student.getName());
	     } 
	     
	     	     
	     /*Map   Json ,value    */
	     Map colors = new HashMap();
	        colors.put("BLACK", "#000000");
	        colors.put("RED", "#FF0000");
	        colors.put("GREEN", "#008000");
	        colors.put("BLUE", "#0000FF");
	        colors.put("YELLOW", "#FFFF00");
	        colors.put("WHITE", "#FFFFFF");
	        
	        String jsonmap = gson.toJson(colors);
	        System.out.println("Map   Json ,value    ");
	        System.out.println("json = " + jsonmap);
	        // Convert JSON string back to Map.
	        Type type1 = new TypeToken>(){}.getType();
	        Map map = gson.fromJson(jsonmap, type1);
	        System.out.println("Json    Map,value    ");
	        for (String key : map.keySet()) {
	            System.out.println("map.get = " + map.get(key));
	        }
	        
	     /*Map   Json ,value   */
	     Map studentmap = new HashMap();
	        studentmap.put("Alice", a);
	        studentmap.put("Bob", b);
	        studentmap.put("Carol", c);
	        studentmap.put("Mallory", d);

	        String jsonmap1 = gson.toJson(studentmap);
	        System.out.println("Map   Json ,value   ");
	        System.out.println("json = " + jsonmap1);
	        // Convert JSON string back to Map.
	        Type type11 = new TypeToken>(){}.getType();
	        System.out.println("Json    Map,value   ");
	        Map map1 = gson.fromJson(jsonmap1, type11);
	        for (String key : map1.keySet()) {
	            System.out.println("map1.get = " + map1.get(key).getName());
	        }   
	     	      	      	      	      	    	    
	}

}
出力結果:
     Json   :
numbersJson = [1,1,2,3,5,8,13]
daysJson = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]
List   Json ,      
jsonNames = ["Alice","Bob","Carol","Mallory"]
List   Json ,     
jsonStudents = [{"name":"Alice","age":20,"address":"Apple St","dateOfBirth":"Nov 1, 3900 12:00:00 AM"},{"name":"Bob","age":23,"address":"Banana St"},{"name":"Carol","age":42,"address":"Grape St","dateOfBirth":"Jun 21, 3900 12:00:00 AM"},{"name":"Mallory","age":24,"address":"Mango St"}]
Json    List,     
student.getName() = Alice
student.getName() = Bob
student.getName() = Carol
student.getName() = Mallory
Map   Json ,value    
json = {"WHITE":"#FFFFFF","BLUE":"#0000FF","YELLOW":"#FFFF00","GREEN":"#008000","BLACK":"#000000","RED":"#FF0000"}
Json    Map,value    
map.get = #FFFFFF
map.get = #0000FF
map.get = #FFFF00
map.get = #008000
map.get = #000000
map.get = #FF0000
Map   Json ,value   
json = {"Mallory":{"name":"Mallory","age":24,"address":"Mango St"},"Alice":{"name":"Alice","age":20,"address":"Apple St","dateOfBirth":"Nov 1, 3900 12:00:00 AM"},"Bob":{"name":"Bob","age":23,"address":"Banana St"},"Carol":{"name":"Carol","age":42,"address":"Grape St","dateOfBirth":"Jun 21, 3900 12:00:00 AM"}}
Json    Map,value   
map1.get = Mallory
map1.get = Alice
map1.get = Bob
map1.get = Carol

次のように表示されます.
1,単一オブジェクトObject,Json列はJsonObject,コロン":"前のkeyはjavaオブジェクトの変数名,コロン":"後ろのValueはjavaオブジェクトの変数値
2,配列とList,Json列はJsonArray
3,MapのJson列はJsonObjectで、コロン":"の前のkeyはMapのKey値で、コロン":"の後ろのValueはMapのValue値です
二、Json列がJavaオブジェクトに変換される際、主にコロン":"の後ろのValueのデータ型が何であるかを見て、このようにJavaオブジェクトのフィールド型が何であるか、Valueのデータ型とフィールドのデータ型が対応していると言える
{
    "success":true,
    "data":
      {  "list":
              [{"dataType":0,
                "distance":435.2473470455821,
                "isFav":0,"parkCode":"0270000558",
                "parkName”:       ",
"parkID":558,
"remark":"",
"parkType":0,
"responsible":"",
"responseTel":"13297062676",
"consultTel":"",
"coordinateX":114.428102,
"coordinateY":30.462254,"
coordinateEntrance":"",
"rateInfo":"   ",
"introduce":"",
"appState":3,
"paymentNoticeMinute":0,
"rentCount":0,
"rentSwitch":0,
"spaceCount":42,
"totalCount":42,
"imageName":"",
"fullImage":"",
"unitFee":0.0,
"unit":0,
"isRoadSide":0,
"rentOvertimeTimes":0.0,
"reservationKeepTime":0,
"supportPayType":0,
"address":"       ",
"state":1},
               
{"dataType":0,
"distance":568.3080108478586,
"isFav":0,
"parkCode":"0270000249",
"parkName":"          ", 
"parkID":249, 
"remark":"", 
"parkType":3, "
“responsible":"", 
"responseTel":"123456789", 
"consultTel":"", 
"coordinateX":114.427728, 
"coordinateY":30.460922, "coordinateEntrance":"114.427005,30.461393,1,1;114.427863,30.462163,1,1;114.428469,30.462171,1,1;114.427885,30.461404,2,1;114.428514,30.461424,2,1;114.428851,30.461397,3,1,1;114.427351,30.462163,3,1,1;", 
"rateInfo":"  3 /  
1 / ", "introduce":"", "appState":15, "paymentNoticeMinute":2, "rentCount":0, "rentSwitch":1, "spaceCount":-95, "totalCount":300, "imageName":"7.jpg", "fullImage":"/picture/park/249/7.jpg", "unitFee":0.01, "unit":20, "isRoadSide":0, "rentOvertimeTimes":0.0, "reservationKeepTime":0, "supportPayType":0, "address":"
B4 12 ", "state":1 } ] } }
package com.hust.map;

public class Park {
         
     int dataType;
     int rentCount;
     int parkCode;
     String parkName;	//     
     int parkID;
     String remark;
     int parkType;
     String responsible;
     String responseTel;
     String consultTel;
     double coordinateX;//  
     double coordinateY;//      
     String coordinateEntrance;
     String rateInfo;	//    
     String  introduce;
     int appState;
     int paymentNoticeMinute;
     int spaceCount;	//    
     int totalCount;	//   
     String imageName;
     String fullImage;
     int reservationKeepTime;
     int isRoadSide;
     double rentOvertimeTimes;
     double unitFee;
     int unit;
     int rentSwitch;
     int supportPayType;
     int isFav;
     double distance;		//  
     String address;	//  
     int state;
     
	public double getCoordinateX() {
		return coordinateX;
	}
	public void setCoordinateX(double coordinateX) {
		this.coordinateX = coordinateX;
	}
	public double getCoordinateY() {
		return coordinateY;
	}
	public void setCoordinateY(double coordinateY) {
		this.coordinateY = coordinateY;
	}
	public String getParkName() {
		return parkName;
	}
	public void setParkName(String parkName) {
		this.parkName = parkName;
	}
	public int getSpaceCount() {
		return spaceCount;
	}
	public void setSpaceCount(int spaceCount) {
		this.spaceCount = spaceCount;
	}
	public int getTotalCount() {
		return totalCount;
	}
	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}
	public String getRateInfo() {
		return rateInfo;
	}
	public void setRateInfo(String rateInfo) {
		this.rateInfo = rateInfo;
	}
	public double getDistance() {
		return distance;
	}
	public void setDistance(double distance) {
		this.distance = distance;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public Park(int dataType, int rentCount, int parkCode, String parkName,
			int parkID, String remark, int parkType, String responsible,
			String responseTel, String consultTel, double coordinateX,
			double coordinateY, String coordinateEntrance, String rateInfo,
			String introduce, int appState, int paymentNoticeMinute,
			int spaceCount, int totalCount, String imageName, String fullImage,
			int reservationKeepTime, int isRoadSide, double rentOvertimeTimes,
			double unitFee, int unit, int rentSwitch, int supportPayType,
			int isFav, double distance, String address, int state) {
		super();
		this.dataType = dataType;
		this.rentCount = rentCount;
		this.parkCode = parkCode;
		this.parkName = parkName;
		this.parkID = parkID;
		this.remark = remark;
		this.parkType = parkType;
		this.responsible = responsible;
		this.responseTel = responseTel;
		this.consultTel = consultTel;
		this.coordinateX = coordinateX;
		this.coordinateY = coordinateY;
		this.coordinateEntrance = coordinateEntrance;
		this.rateInfo = rateInfo;
		this.introduce = introduce;
		this.appState = appState;
		this.paymentNoticeMinute = paymentNoticeMinute;
		this.spaceCount = spaceCount;
		this.totalCount = totalCount;
		this.imageName = imageName;
		this.fullImage = fullImage;
		this.reservationKeepTime = reservationKeepTime;
		this.isRoadSide = isRoadSide;
		this.rentOvertimeTimes = rentOvertimeTimes;
		this.unitFee = unitFee;
		this.unit = unit;
		this.rentSwitch = rentSwitch;
		this.supportPayType = supportPayType;
		this.isFav = isFav;
		this.distance = distance;
		this.address = address;
		this.state = state;
	}
	public int getDataType() {
		return dataType;
	}
	public void setDataType(int dataType) {
		this.dataType = dataType;
	}
	public int getRentCount() {
		return rentCount;
	}
	public void setRentCount(int rentCount) {
		this.rentCount = rentCount;
	}
	public int getParkCode() {
		return parkCode;
	}
	public void setParkCode(int parkCode) {
		this.parkCode = parkCode;
	}
	public int getParkID() {
		return parkID;
	}
	public void setParkID(int parkID) {
		this.parkID = parkID;
	}
	public String getRemark() {
		return remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	public int getParkType() {
		return parkType;
	}
	public void setParkType(int parkType) {
		this.parkType = parkType;
	}
	public String getResponsible() {
		return responsible;
	}
	public void setResponsible(String responsible) {
		this.responsible = responsible;
	}
	public String getResponseTel() {
		return responseTel;
	}
	public void setResponseTel(String responseTel) {
		this.responseTel = responseTel;
	}
	public String getConsultTel() {
		return consultTel;
	}
	public void setConsultTel(String consultTel) {
		this.consultTel = consultTel;
	}
	public String getCoordinateEntrance() {
		return coordinateEntrance;
	}
	public void setCoordinateEntrance(String coordinateEntrance) {
		this.coordinateEntrance = coordinateEntrance;
	}
	public String getIntroduce() {
		return introduce;
	}
	public void setIntroduce(String introduce) {
		this.introduce = introduce;
	}
	public int getAppState() {
		return appState;
	}
	public void setAppState(int appState) {
		this.appState = appState;
	}
	public int getPaymentNoticeMinute() {
		return paymentNoticeMinute;
	}
	public void setPaymentNoticeMinute(int paymentNoticeMinute) {
		this.paymentNoticeMinute = paymentNoticeMinute;
	}
	public String getImageName() {
		return imageName;
	}
	public void setImageName(String imageName) {
		this.imageName = imageName;
	}
	public String getFullImage() {
		return fullImage;
	}
	public void setFullImage(String fullImage) {
		this.fullImage = fullImage;
	}
	public int getReservationKeepTime() {
		return reservationKeepTime;
	}
	public void setReservationKeepTime(int reservationKeepTime) {
		this.reservationKeepTime = reservationKeepTime;
	}
	public int getIsRoadSide() {
		return isRoadSide;
	}
	public void setIsRoadSide(int isRoadSide) {
		this.isRoadSide = isRoadSide;
	}
	public double getRentOvertimeTimes() {
		return rentOvertimeTimes;
	}
	public void setRentOvertimeTimes(double rentOvertimeTimes) {
		this.rentOvertimeTimes = rentOvertimeTimes;
	}
	public double getUnitFee() {
		return unitFee;
	}
	public void setUnitFee(double unitFee) {
		this.unitFee = unitFee;
	}
	public int getUnit() {
		return unit;
	}
	public void setUnit(int unit) {
		this.unit = unit;
	}
	public int getRentSwitch() {
		return rentSwitch;
	}
	public void setRentSwitch(int rentSwitch) {
		this.rentSwitch = rentSwitch;
	}
	public int getSupportPayType() {
		return supportPayType;
	}
	public void setSupportPayType(int supportPayType) {
		this.supportPayType = supportPayType;
	}
	public int getIsFav() {
		return isFav;
	}
	public void setIsFav(int isFav) {
		this.isFav = isFav;
	}
	public int getState() {
		return state;
	}
	public void setState(int state) {
		this.state = state;
	}
         
}
DataFromNetwork.java
package com.hust.map;

import java.util.ArrayList;
import java.util.HashMap;
public class DataFromNetWork {
      boolean success;
      HashMap> data;
}
DataFromNetWork mDataFromNetWork=mGson.fromJson(mParksString, DataFromNetWork.class);
	 ArrayList mParksList=mDataFromNetWork.data.get("list");