zoukankan      html  css  js  c++  java
  • Json数据交换一Gson

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。

    添加依赖

    <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
       <version>2.2.4</version>
    </dependency>
    

    Gson的基本用法

    基本数据类型的解析(String解析成其他类型)

    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类生成JSON

    Gson gson = new Gson();
    User user = new User("毛驴哥",24);
    String jsonObject = gson.toJson(user);     // {"name":"毛驴哥","age":24}
    

    POJO类解析JSON

    Gson gson = new Gson();
    String jsonString = "{"name":"毛驴哥","age":24}";
    User user = gson.fromJson(jsonString, User.class);
    

    属性重命名 @SerializedName 注解的使用

    json的email_address就可以对应属性名emailAddress

    @SerializedName("email_address")
    public String emailAddress;
    

    SerializedName注解提供了两个属性,上面用到了其中一个,别外还有一个属性alternate,接收一个String数组。

    @SerializedName(value = "emailAddress", alternate = {"email", "email_address"})
    public String emailAddress;
    

    三个属性(email_address、email、emailAddress)中出现任意一个时均可以得到正确的结果。

    Gson中使用泛型

    对于Java来说List 和List 这俩个的字节码文件只一个那就是List.class,这是Java泛型使用时要注意的问题 泛型擦除。
    为了解决的上面的问题,Gson为我们提供了TypeToken来实现对泛型的支持

    Gson gson = new Gson();
    String jsonArray = "["Android","Java","PHP"]";
    String[] strings = gson.fromJson(jsonArray, String[].class);    //直接改为 List<String>.class 是行不通
    List<String> stringList = gson.fromJson(jsonArray, new TypeToken<List<String>>() {}.getType());
    

    注:TypeToken的构造方法是protected修饰的,所以上面才会写成new TypeToken<List>() {}.getType() 而不是 new TypeToken<List>().getType()

  • 相关阅读:
    第16章 Java内存模型
    第15章 原子变量与非阻塞同步机制
    第14章 构建自定义的同步工具
    第13章 显式锁
    第12章 并发程序的测试
    第11章 性能与可伸缩性
    第10章避免活跃性危险
    第8章 线程池的使用
    JDBC工具类——JdbcUtils(6)
    JDBC工具类——JdbcUtils(5)
  • 原文地址:https://www.cnblogs.com/loveer/p/11306338.html
Copyright © 2011-2022 走看看