Gson的使用总结

从Gson的官方Github用户使用指南上学习总结,可能有不足之处,个人经验的总结
如果有更好的更优秀的使用方法,希望能够在评论里告知我,感谢大家

Gson官方使用手册原链接 点这里《Gson User Guide》

//初始化Gson类
Gson gson = new Gson();

//基础用法
gson.toJson(1);            // ==> 1
gson.toJson("abcd");       // ==> "abcd"
gson.toJson(new Long(10)); // ==> 10
int[] values = { 1 };
gson.toJson(values);       // ==> [1]

int one = gson.fromJson("1", int.class);
Integer one = gson.fromJson("1", Integer.class);
Long one = gson.fromJson("1", Long.class);
Boolean false = gson.fromJson("false", Boolean.class);
String str = gson.fromJson("\"abc\"", String.class);
String[] anotherStr = gson.fromJson("[\"abc\"]", String[].class);

//对象的转化
class User {
    int id;
    String name;
    //这里省略类属性的get、set方法
}

User user = new User();
user.setId(100);
user.setName("test");
//将其转化为json字符串
String json = gson.toJson(user);            // ==> {"id":"100","name":"test"}

//将其转化为对象
User user2 = gson.fromJson(json, User.class) //这种方法不需要强制转化
User user2 = (User) gson.fromJson(json)         //这种方法需要强制转化,因为Gson不知道对象类型

//复杂对象的转化
/*
{
    "id":"100",
    "data":
    {
        "name":"one",
        "number":"123456"
    }
}
*/
String json;//假设该字符串对象保存以上格式json

//首先需要能够存储这种json的数据类
//省略类属性的get、set方法
class Msg {
    int id;
    Data[] data;
}

class Data {
    String name;
    String number;
}
//根据json的左右大括号来划分对象层次
Msg msg = gson.fromJson(json, Msg.class); //第一层对象,存储数据
msg.getId() // ==> 100
//Data data = msg.getData() 这里会报错,显示不能够转化,因此需要二次转化
//这里先将data第二层存储的json转化成Gson提供的JsonElement类型
//然后再将其转化成需要的类型即可正常引用数据
Data data = gson.fromJson(gson.toJsonTree(msg.getData()), Data.class);

//泛型的序列化方法
//假设有以下json字符串
/*
{
    "id":"10086",
    "name":"test"
}
*/
//现在像将该json数据存入HashMap中,则需要告知Gson泛型的信息
Type type = new TypeToken<HashMap<String, String>>() {}.getType();
HashMap<String, String> dataMap = gson.fromJson(json, type);
dataMap.get("id")         // ==> 10086
Last modification:May 6th, 2019 at 08:16 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment