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()

  • 相关阅读:
    SpringMVC学习笔记----
    各种语言学习
    七步精通Python机器学习 转
    开源GIS有用
    sql 语句
    调试windows服务最简单的方法之一
    sqlserver2008 win7下安装 windows installer错误
    高德地图AmapSDKDemo运行
    google mapsDemo示例运行
    android开发环境搭建遇到的问题
  • 原文地址:https://www.cnblogs.com/loveer/p/11306338.html
Copyright © 2011-2022 走看看