Gson是Google公司发布的一个开发源码的Java库,可用于将Java对象转换为JSON字符串,也可用于将JSON字符串转换为对应的Java对象。本介绍下Gson的基本使用方法,包括序列化和反序列化;文中所使用到的软件版本:Java 1.8.0_191、Gson 2.8.6。
1、引入依赖
1<dependency> 2 <groupId>com.google.code.gson</groupId> 3 <artifactId>gson</artifactId> 4 <version>2.8.6</version> 5</dependency>
2、序列化
1public static String serialize() { 2 MyBean bean = new MyBean(); 3 bean.setS("测试字符串"); 4 Calendar calendar = Calendar.getInstance(); 5 calendar.add(Calendar.HOUR_OF_DAY, -1); 6 bean.setD(calendar.getTime()); 7 8 List<MyBean> list = new ArrayList<MyBean>(); 9 list.add(bean); 10 Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>(); 11 map.put("data", list); 12 13 Gson gson = new GsonBuilder() 14 .serializeNulls() //序列化值为null的字段 15 .setDateFormat("yyyy-MM-dd HH:mm:ss") //设置日期格式 16 .excludeFieldsWithModifiers(Modifier.STATIC)//根据修饰符过滤字段 17 .create(); 18 String result = gson.toJson(map); 19 System.out.println(result); 20 return result; 21 }
3、反序列化
1public static void deserialize() { 2 String s = serialize(); 3 Gson gson = new GsonBuilder() 4 .setDateFormat("yyyy-MM-dd HH:mm:ss") //设置日期格式 5 .create(); 6 Type type = new TypeToken<Map<String, List<MyBean>>>(){}.getType(); 7 Map<String, List<MyBean>> map = gson.fromJson(s, type); 8 System.out.println(map); 9 10 //直接通过api获取相应数据 11 JsonElement element = JsonParser.parseString(s); 12 JsonArray data = element.getAsJsonObject().getAsJsonArray("data"); 13 JsonObject bean = data.get(0).getAsJsonObject(); 14 System.out.println(bean.get("s").getAsString()); 15 //... 16 }
4、完整例子

1package com.inspur.demo.json; 2 3import java.lang.reflect.Modifier; 4import java.lang.reflect.Type; 5import java.util.ArrayList; 6import java.util.Calendar; 7import java.util.HashMap; 8import java.util.List; 9import java.util.Map; 10 11import com.google.gson.Gson; 12import com.google.gson.GsonBuilder; 13import com.google.gson.JsonArray; 14import com.google.gson.JsonElement; 15import com.google.gson.JsonObject; 16import com.google.gson.JsonParser; 17import com.google.gson.reflect.TypeToken; 18 19/** 20 * Gson操作JSON数据 21 */ 22public class GsonCase { 23 /** 24 * 序列化 25 */ 26 public static String serialize() { 27 MyBean bean = new MyBean(); 28 bean.setS("测试字符串"); 29 Calendar calendar = Calendar.getInstance(); 30 calendar.add(Calendar.HOUR_OF_DAY, -1); 31 bean.setD(calendar.getTime()); 32 33 List<MyBean> list = new ArrayList<MyBean>(); 34 list.add(bean); 35 Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>(); 36 map.put("data", list); 37 38 Gson gson = new GsonBuilder() 39 .serializeNulls() //序列化值为null的字段 40 .setDateFormat("yyyy-MM-dd HH:mm:ss") //设置日期格式 41 .excludeFieldsWithModifiers(Modifier.STATIC)//根据修饰符过滤字段 42 .create(); 43 String result = gson.toJson(map); 44 System.out.println(result); 45 return result; 46 } 47 48 /** 49 * 反序列化 50 */ 51 public static void deserialize() { 52 String s = serialize(); 53 Gson gson = new GsonBuilder() 54 .setDateFormat("yyyy-MM-dd HH:mm:ss") //设置日期格式 55 .create(); 56 Type type = new TypeToken<Map<String, List<MyBean>>>(){}.getType(); 57 Map<String, List<MyBean>> map = gson.fromJson(s, type); 58 System.out.println(map); 59 60 //直接通过api获取相应数据 61 JsonElement element = JsonParser.parseString(s); 62 JsonArray data = element.getAsJsonObject().getAsJsonArray("data"); 63 JsonObject bean = data.get(0).getAsJsonObject(); 64 System.out.println(bean.get("s").getAsString()); 65 //... 66 } 67 68 public static void main(String[] args) { 69 serialize(); 70 deserialize(); 71 } 72 73}
GsonCase

1package com.inspur.demo.json; 2 3import java.util.Arrays; 4import java.util.Date; 5 6public class MyBean { 7 private String s = "字符串"; 8 private String s2; 9 private String s3 = "字符串3"; 10 private int i = 123; 11 private Integer i2; 12 private char c = '到'; 13 private char[] c2 = new char[]{'a', 'b'}; 14 private Date d = new Date(); 15 private Date[] d2 = new Date[]{new Date(), new Date()}; 16 public String getS() { 17 return s; 18 } 19 public void setS(String s) { 20 this.s = s; 21 } 22 public String getS2() { 23 return s2; 24 } 25 public void setS2(String s2) { 26 this.s2 = s2; 27 } 28 public String getS3() { 29 return s3; 30 } 31 public void setS3(String s3) { 32 this.s3 = s3; 33 } 34 public int getI() { 35 return i; 36 } 37 public void setI(int i) { 38 this.i = i; 39 } 40 public Integer getI2() { 41 return i2; 42 } 43 public void setI2(Integer i2) { 44 this.i2 = i2; 45 } 46 public char getC() { 47 return c; 48 } 49 public void setC(char c) { 50 this.c = c; 51 } 52 public char[] getC2() { 53 return c2; 54 } 55 public void setC2(char[] c2) { 56 this.c2 = c2; 57 } 58 public Date getD() { 59 return d; 60 } 61 public void setD(Date d) { 62 this.d = d; 63 } 64 public Date[] getD2() { 65 return d2; 66 } 67 public void setD2(Date[] d2) { 68 this.d2 = d2; 69 } 70 @Override 71 public String toString() { 72 return "MyBean [s=" + s + ", s2=" + s2 + ", s3=" + s3 + ", i=" + i + ", i2=" + i2 + ", c=" + c + ", c2=" 73 + Arrays.toString(c2) + ", d=" + d + ", d2=" + Arrays.toString(d2) + "]"; 74 } 75}
MyBean