1.Gson 介绍。
Gson是处理json格式工具,联合GsonFormat插件使用,更美味。
2.注解
- @Expose 制定字段显示。serialize序列化。deserialize反序列化。true为允许。对应false
- @SerializedName 解决Json名字段不同
- @Since/@Until 控制版本。在实例化Gson中设置版本。若大于等于since版本和小于until版本,显示。
- @JsonAdapter 自定义序列化和反序列化。可以---点击打开链接
3.基础
- Json数组与字符串数组
Gson gson = new Gson(); String jsonArray = "[\"https://github.com/xyzamo\",\"https://blog.csdn.net/sinat_24037895\",\"Java\",\"Kotlin\",\"Git\",\"GitHub\"]"; String[] strings = gson.fromJson(jsonArray, String[].class); syop("Json数组转化为字符串数组"+"\n");//等同于System.out.println() for (String string : strings) { syop(string); } syop("\n字符串数组转为Json数组:"); jsonArray = gson.toJson(jsonArray, new TypeToken<String>(){}.getType()); syop(jsonArray);
2.Json数组与List
Gson gson = new Gson(); String jsonArray = "[\"https://github.com/leavesC\",\"https://www.jianshu.com/u/9df45b87cfdf\",\"Java\",\"Kotlin\",\"Git\",\"GitHub\"]"; List<String> stringList = gson.fromJson(jsonArray,new TypeToken<List<String>>(){}.getType()); syop("\nJson数组转为List"); for (String string : stringList) { syop(string); } //List转化为Json数组 jsonArray = gson.toJson(stringList,new TypeToken<List<String>>(){}.getType()); syop("\nList转化为Json数组:"); syop(jsonArray);
3.序列化和反序列化
{ "name": "罗纳尔多", "sex": "男", "age": 35 }
public void DateFor(){ Gson gson = new GsonBuilder() .setPrettyPrinting() .setDateFormat("yyyy-mm-dd HH:mm:ss:sss") .create();//setPrettyPrinting格式化Json(美观) Date date = new Date(); DateSimple dateSimple = new DateSimple(date,new Date(date.getTime()+10000)); syop(dateSimple); syop("GSON" + gson.toJson(dateSimple)); String json = "{\n" + " \"date\": \"2018-03-17 19:38:50:033\",\n" + " \"date2\": \"2018-03-17 19:55:30:033\"\n" + "}"; Gson gson1 = new Gson(); System.out.println(); System.out.println(gson.fromJson(json,DateSimple.class)); syop("正版数据"+gson.fromJson(gson.toJson(dateSimple),DateSimple.class)); } public void CeLv(){//自定义排除策略和注解@Expose功能相似。SetExclusionStrategies() Gson gson = new GsonBuilder() .serializeNulls() .setPrettyPrinting() .setExclusionStrategies(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes f) { //排除指定字段 return false; //return f.getName().equals("name");//排除字段为name } @Override public boolean shouldSkipClass(Class<?> clazz) { //排除字段类型 //return clazz.getName().equals(int.class.getName());//排除字段类型为int的 return false; } }).create(); UserInfo userInfo = new UserInfo(null,24,"男"); syop(gson.toJson(userInfo));