之前一直用 fastjson, 但目前项目中使用的是GSON, 两者的性能在请求数据量不太的情况下差不多。。
本文适用于不了解GSON的同学,如果你已经了解了,完全可以不看,
至少之前,我是很烦燥JsonPrimitive JsonElement JsonObject JsonArray这几个东西的。对GSON了解得也很浅,只会baidu搜索它的用法,然后遇到错误了也不知道该如何解决。
直到后来,我看了它的源码,哈哈
下面从源码的角度去分析该如何解析获取到的字符串。。看看这个类图,已经很简化了。。
为了更好的理解,我写一个基本的JSON串:
{
“result”:1,
"data":[
{"name":"david", "age":1,"sex":1},
{"name":"lilei", "age":1,"sex":1}
],
"mesage":"request ok"
}
JsonElement : 它就是一个抽象类,一堆公共的方法申明,没有实现体,不用管它
JsonPrimitive : 里面只有一个成员变量Object , 相当于一个确定的值,它可以是1, david 等基本数据类型
JsonObject : 还是看它的成员变量 LinkedTreeMap<String, JsonElement> members, 只有一个LinkedTreeMap, 它是一个树类型的MAP, 它可以是整个JSON串,数据是键值类型
JsonArray : 继续看它的成员变量 List<JsonElement> elements = new ArrayList(), 就是一个列表,可以看到data后面的列表数据。要知道在JSON串里面,大括号表示的是对象,中括号表示的是数组。。
了解了这些,感觉你自己应该会使用GSON解析了吧!
对了,还有一个JsonParser解析类,使用它来解决JSON串,得到的结果是JsonElement, 你可以再次把它强转为JsonPrimitive , JsonObject, JsonArray,都可以,主要看你的数据定义的结构。
还有一种解析方法是直接使用fromJson toJson,对JSON串和对象互转的,这个比较简单,就不写了...