1、简述
> map序列化 map序列化(带有key-value的形式, 可嵌套map) gson.fromJson(json, new TypeToken<XXX>() {}.getType()); 如 gson.fromJson(json, new TypeToken<Map<String,Object>>() {}.getType());
2、基本类
@Data @NoArgsConstructor @AllArgsConstructor public class GsonEntity { private Integer id; private String name; private Date birthday; }
3、测试类
package sun.rain.amazing.gson.quickstart; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import org.junit.Test; import sun.rain.amazing.gson.quickstart.arraylist.GsonEntity; import java.util.*; /** * @author sunRainAmazing */ public class GsonMapTest { GsonEntity user0 = new GsonEntity(100,"tom0",new Date()); GsonEntity user1 = new GsonEntity(101,"tom1",new Date()); GsonEntity user2 = new GsonEntity(102,"tom2",new Date()); private Gson gson = new Gson(); /** * 添加反序列化参数 类型 * 采用 第二参数的形式 -- 进行解析 * * {"number":1205, * "userList":[{"id":100,"name":"tom0","birthday":"Jul 5, 2018 4:25:00 PM"}, * {"id":101,"name":"tom1","birthday":"Jul 5, 2018 4:25:00 PM"}], * "someone":"wonderful", * "userMap":{"user":{"id":102,"name":"tom2","birthday":"Jul 5, 2018 4:25:00 PM"}}} * * {number=1205.0, userList=[{id=100.0, name=tom0, birthday=Jul 5, 2018 4:25:00 PM}, * {id=101.0, name=tom1, birthday=Jul 5, 2018 4:25:00 PM}], * someone=wonderful, * userMap={user={id=102.0, name=tom2, birthday=Jul 5, 2018 4:25:00 PM}}} * * * { * "number": 1205, * "userList": [ * { * "id": 100, * "name": "tom0", * "birthday": "2018-07-05" * }, * { * "id": 101, * "name": "tom1", * "birthday": "2018-07-05" * } * ], * "someone": "wonderful", * "userMap": { * "user": { * "id": 102, * "name": "tom2", * "birthday": "2018-07-05" * } * } * } * [{number=1205.0, userList=[{id=100.0, name=tom0, birthday=2018-07-05}, * {id=101.0, name=tom1, birthday=2018-07-05}], * someone=wonderful, userMap={user={id=102.0, name=tom2, birthday=2018-07-05}}}] * */ @Test public void testMapArgs(){ List<GsonEntity> list = new ArrayList<>(); list.add(user0); list.add(user1); Map<String,Object> muser = new HashMap<>(); muser.put("user",user2); Map<String,Object> map = new HashMap<>(); map.put("number",1205); map.put("someone","wonderful"); map.put("userList",list); map.put("userMap",muser); // new Gson() 序列化 和 反序列化 String jsonArr = gson.toJson(map); System.out.println(jsonArr); // 反序列化 Map<String,Object> usersMap = gson.fromJson(jsonArr, new TypeToken<Map<String,Object>>(){}.getType()); System.out.println(usersMap); // new GsonBuilder() 序列化 和 反序列化 gson = new GsonBuilder() .setPrettyPrinting() .setDateFormat("yyyy-MM-dd") .create(); jsonArr = gson.toJson(map); System.out.println(jsonArr); // 反序列化 usersMap = gson.fromJson(jsonArr, new TypeToken<Map<String,Object>>(){}.getType()); System.out.println(Arrays.asList(usersMap)); } } /* 注:TypeToken的构造方法是protected修饰的, 所以上面才会写成 new TypeToken<Map<String,Object>>(){}.getType() 而不是new TypeToken<Map<String,Object>>().getType() */