Android笔记
——Gson
【若对该知识点有更多想了解的,欢迎私信博主~~】
依赖框架:Gson
一:优势及作用
- 提供简单的
toJson()
和fromJson()
方法,将java对象与JSON轻松转换 - 允许将现有的不可修改对象与JSON相互转换
- Java泛型的支持
- 允许对象的自定义表示
- 支持任意复杂的对象
二:Gson的配置
-
分build.gradle中添加(注入依赖)
dependencies { implementation 'com.google.code.gson:gson:2.8.5' }
三:使用
-
生成Json对象
-
addProperty
//Google自带的为JSONObject,Gson里的是JsonObject JsonObject object=new JsonObject(); object.addProperty("name","Hello");//支持String、int、boolean、char //{"name":"lk"}
-
add
JsonObject object=new JsonObject(); JsonObject jsonElement =new JsonObject(); jsonElement.addProperty("name","Hello"); jsonElement.addProperty("age",20); object.add("msg",jsonElement); //{"msg":{"name":"Hello","age":20}}
-
-
生成Gson对象
Gson gson=new Gson();//方式1 Gson gson=new GsonBuilder().create();//方式2
-
Java对象与Json对象的转换
-
数组
Gson gson=new Gson(); String jsonArray = "[\"a\",\"b\",\"c\",\"d\"]"; String[] strings = gson.fromJson(jsonArray, String[].class); for (String s : strings) { Log.e("aaa","s:"+s+"\n"); } //s:a //s:b //s:c //s:c jsonArray=gson.toJson(strings,String[].class); Log.e("aaa","jsonArray:"+jsonArray); //jsonArray:["a","b","c","d"]
-
集合
Gson gson=new Gson(); String jsonArray = "[\"a\",\"b\",\"c\",\"d\"]"; List<String> strings = gson.fromJson(jsonArray, new TypeToken<List<String>>(){}.getType()); for (String s : strings) { Log.e("aaa","s:"+s+"\n"); } //s:a //s:b //s:c //s:c jsonArray=gson.toJson(strings,new TypeToken<List<String>>(){}.getType()); Log.e("aaa","jsonArray:"+jsonArray); //jsonArray:["a","b","c","d"]
-
对象
-
User类
import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.Since; import java.util.Date; public class User { //@SerializedName:修改序列化和反序列化时匹配的名称 //@Expose:指定该字段是否序列化或反序列化 //serialize--序列化,alternate--反序列化,true--是,false--否 //@Since:根据版本,指定该字段是否序列化或反序列化 //可匹配userid @SerializedName("userid") private Integer id; //可匹配username、userName、Name @SerializedName(value = "username", alternate = {"userName", "Name"}) private String name; //序列化时不生效,反序列化时生效,且GsonBuilder版本高于1.4 @Expose(serialize = false, deserialize = true) @Since(1.4) private Date makedate; public User(Integer id, String name, Date makedate) { this.id = id; this.name = name; this.makedate = makedate; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getMakedate() { return makedate; } public void setMakedate(Date makedate) { this.makedate = makedate; } @Override public String toString() { return "User{" + "id=" + id + ", name=\"" + name + '\"' + ", makedate=\"" + makedate + '\"' + '}'; } }
-
MainActivity
Date date=new Date(); Gson gson=new GsonBuilder() //根据访问修饰符过滤 .excludeFieldsWithModifiers(Modifier.PUBLIC,Modifier.STATIC) //自定义过滤 .setExclusionStrategies(new ExclusionStrategy() { //根据字段名过滤 @Override public boolean shouldSkipField(FieldAttributes f) { return f.getName().equals("id"); } //根据类名过滤 @Override public boolean shouldSkipClass(Class<?> clazz) { return false; } }) .serializeNulls()//即使为null,也会显示出来(默认值若为null,不显示) .setPrettyPrinting()//格式化输出 .setDateFormat("yyyy-MM-dd hh:mm:ss:SSS")//时间格式化 .create(); //创造对象 User user=new User(1,"hello",date); //对象转JSON String a=gson.toJson(user,User.class); Log.e("aaa","a:"+a); //{ // "makedate": "2020-08-08 03:54:08:517", // "name": "hello" //}
-
-
四:参考文档
- https://www.jianshu.com/p/0444693c2639
- https://github.com/google/gson