Json数据交换一Gson

Posted 遇事不决,可问神奇海螺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Json数据交换一Gson相关的知识,希望对你有一定的参考价值。

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

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

四.泛型POJO

当有部分数据不同,其他数据相同时,可以用泛型POJO减少类的定义

    {"code":"0","message":"success","data":{}}
    {"code":"0","message":"success","data":[]}
    public class Result<T> {
        public int code;
        public String message;
        public T data;
    }

以上是关于Json数据交换一Gson的主要内容,如果未能解决你的问题,请参考以下文章

json和gson的区别

gson解析json

如何将Java对象转换为JSON(Gson)?

android gson使用--json2对象与对象2json

75JSON 解析库---FastJson, Gson

gson解析json