gson使用点滴

JSON 是一种文本形式的数据交换格式,它比XML更轻量、比二进制容易阅读和编写,调式也更加方便;解析和生成的方式很多,Java中最常用的类库有:JSON-Java、Gson、Jackson、FastJson等
官网

Gson的基本用法

Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化;同时每个方法都提供了重载方法

  • 基本数据类型的解析
    Gson gson = new Gson();
    int i = gson.fromJson("100", int.class); //100
    double d = gson.fromJson("\"99.99\"", double.class);  //99.99
    boolean b = gson.fromJson("true", boolean.class);     // true
    String str = gson.fromJson("String", String.class);   // String
    
  • 基本数据类型的生成
    Gson gson = new Gson();
    String jsonNumber = gson.toJson(100);       // 100
    String jsonBoolean = gson.toJson(false);    // false
    String jsonString = gson.toJson("String"); //"String"
    
  • pojo类解析与生成
    • pojo类
      public class Person {
          private String name;
          private Integer age;
      }
      
    • 解析
      Gson gson = new Gson();
      String json = "{\"name\":\"tom\",\"age\":12}";
      Person person = gson.fromJson(json,Person.class);
      System.out.println(person);
      
    • 生成json
      Gson gson = new Gson();
      Person person = new Person("tom",12);
      String json = gson.toJson(person);
      System.out.println(json);
      
    :json的键和值是的名称和类型是和pojo类一一对应的

属性重命名 @SerializedName 注解

  • Gson在序列化和反序列化时需要使用反射,使用@SerializedName注解可以更改映射规则
  • 为POJO字段提供备选属性名:SerializedName注解提供了两个属性,上面用到了其中一个,别外还有一个属性alternate,接收一个String数组
    :alternate需要2.4版本
    @SerializedName(value = "name",alternate = {"my_name","myName"})
    private String myName;
    //当三个属性(name,my_name,myName)都中出现任意一个均可以等到正确结果,当多种情况同时出现,以最后一个出现的值为准。
    
    Gson gson = new Gson();
    String json = "{\"my_name\":\"tom1\",\"name\":\"tom2\",\"myName\":\"tom3\",\"age\":18}";
    Person person = gson.fromJson(json,Person.class);
    System.out.println(person);
    

Gson数组处理

  • 遇到数组只需将反射类型换成数组类型即可
    Gson gson = new Gson();
    String json = "[{\"name\":\"tom\",\"age\":18},{\"name\":\"tom\",\"age\":18},{\"name\":\"tom\",\"age\":18}]";
    Person[] people = gson.fromJson(json,Person[].class);
    for (Person person : people) {
        System.out.println(person);
    }
    
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容