Android的Gson的使用方法,实现Json结构间相互转换

原创 2016年05月31日 10:16:59

一,把数组,对象,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<String> names = new ArrayList<String>();
	        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<Student> students = new ArrayList<Student>();
	     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<List<Student>>(){}.getType();
	     System.out.println("Json串转换成List,元素是对象");
	     List<Student> studentList = gson.fromJson(jsonStudents, type);

	     for (Student student : studentList) {
	            System.out.println("student.getName() = " + student.getName());
	     } 
	     
	     	     
	     /*Map转化成Json串,value是字符串*/
	     Map<String, String> colors = new HashMap<String, String>();
	        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<Map<String, String>>(){}.getType();
	        Map<String, String> 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<String, Student> studentmap = new HashMap<String, Student>();
	        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<Map<String, Student>>(){}.getType();
	        System.out.println("Json串转换成Map,value是对象");
	        Map<String, Student> 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元/小时\n晚上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":"武汉市光谷金融港\n武汉市光谷金融港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<String,ArrayList<Park>> data;
}


DataFromNetWork mDataFromNetWork=mGson.fromJson(mParksString, DataFromNetWork.class);
	 ArrayList<Park> mParksList=mDataFromNetWork.data.get("list");


版权声明:本文为博主原创文章,未经博主允许不得转载。

Gson的详细使用(android必备,快速提高开发效率)

Gson的详细使用(android必备,快速提高开发效率)         接下来我要强烈给大家推荐一个google官方推荐使用的json解析库Gson。掌握好它之后,在以后的开发中就会减少非常多的代...
  • oQiHaoGongYuan
  • oQiHaoGongYuan
  • 2016年03月21日 14:34
  • 10927

Android之gson操作系列1

Android之gson操作系列1文章链接:http://blog.csdn.net/qq_16628781/article/details/64246167知识点: json的简介; json和XM...
  • qq_16628781
  • qq_16628781
  • 2017年03月21日 00:53
  • 314

Android JSON数据与实体类之间的相互转化-------GSON的用法

这篇文章就是示范如何用GSON把JSON数据与实体类进行相互转化,需要用到gson-2.3.1.jar这个包。注释也比较详细,能够快速让接触gson的人上手...
  • yaochangliang159
  • yaochangliang159
  • 2015年09月26日 17:10
  • 9960

在Android Studio中如何添加GSON 并使用GsonFormat快速实现实体类

方法一: 1.在Android Studio中按F4快捷键进入Project Structure 2点击+号 . 3.选择Library dependency 4.搜索GSON 5.添加进去 方法...
  • xin917480852
  • xin917480852
  • 2016年03月15日 00:12
  • 31660

android-gson使用

android gson的使用
  • chenyannan0617
  • chenyannan0617
  • 2016年07月14日 20:53
  • 2138

android Gson的使用

相对于较为传统的Json解析来说,google共享的开源Gson在解析速度和所使用的内存在有着明显的优势,虽然说阿里巴巴也提供了fastgson包,但是它跟Gson的处理速度大同小异,只是底层实现的原...
  • kongzhichen
  • kongzhichen
  • 2013年08月21日 11:08
  • 42271

Android:用GSON 五招之内搞定任何JSON数组

写在前面原文  http://www.iamxiarui.com/2016/08/30/android:用gson-五招之内搞定任何json数组/ 关于GSON的入门级使用,这里...
  • qq_35114086
  • qq_35114086
  • 2016年09月29日 22:57
  • 5498

Android-Gson+GsonFormat的导入

参考:GsonFormat的使用gson的相关类一、Android Studio快速添加Gson1、File->Project Structure: 2、app->Dependencies->”+”...
  • sinat_31057219
  • sinat_31057219
  • 2017年05月09日 09:54
  • 495

Android用Gson解析Json

转载请标明出处:http://blog.csdn.net/wu_wxc/article/details/53706000 本文出自【吴孝城的CSDN博客】 Gson是谷歌推出的,目前解析Json...
  • wu_wxc
  • wu_wxc
  • 2016年12月17日 11:51
  • 1493

Android:使用Gson解析复杂的JSON数据

本文主要讲解android如何解析复杂格式的JSON数据,适合android初学者和初步接触JSON的人。...
  • u012028501
  • u012028501
  • 2016年04月23日 13:00
  • 7058
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android的Gson的使用方法,实现Json结构间相互转换
举报原因:
原因补充:

(最多只允许输入30个字)