【Android开发--新手必看篇】依赖框架Gson的使用

Android笔记

​ ——Gson
若对该知识点有更多想了解的,欢迎私信博主~~

依赖框架:Gson
一:优势及作用
  1. 提供简单的toJson()fromJson()方法,将java对象与JSON轻松转换
  2. 允许将现有的不可修改对象与JSON相互转换
  3. Java泛型的支持
  4. 允许对象的自定义表示
  5. 支持任意复杂的对象
二:Gson的配置
  1. 分build.gradle中添加(注入依赖)

    dependencies {
    	implementation 'com.google.code.gson:gson:2.8.5'
    }
    
三:使用
  1. 生成Json对象

    1. addProperty

      //Google自带的为JSONObject,Gson里的是JsonObject
      JsonObject object=new JsonObject();
      object.addProperty("name","Hello");//支持String、int、boolean、char
      //{"name":"lk"}
      
    2. 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}}
      
  2. 生成Gson对象

    Gson gson=new Gson();//方式1
    Gson gson=new GsonBuilder().create();//方式2
    
  3. Java对象与Json对象的转换

    1. 数组

      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"]
      
    2. 集合

      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"]
      
    3. 对象

      1. 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 + '\"' +
                        '}';
            }
        }
        
      2. 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"
        //}
        
四:参考文档
  1. https://www.jianshu.com/p/0444693c2639
  2. https://github.com/google/gson
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值