GSON使用概述
GSON弥补了JSON的许多不足的地方,在实际应用中更加适用于Java开发。在这里,我们主要讲解的是利用GSON来操作java对象和json数据之间的相互转换,包括了常见的对象序列化和反序列化的知识。
一、前言
因为json有2种类型:
- 一种是对象,
object
->{key:value,key:value,...}
。 - 另一种是数组,
array
->[value,value,...]
。
所以针对这两种类型,来展开对json数据的操作。
GSON在解析json的时候,大体上有2种类型,一种是直接在内存中生成object或array,通过手工指定key来获取值;另一种是借助javabean来进行映射获取值。
二、对 json
数据进行反序列化,得到java
对象
1、不借助java
类,直接解析json
数据
1、json
是对象类型
当ajax传过来的json数据属于对象时,不论这个对象简单还是复杂,都可以轻松地把它们给解析出来。
ajax传过来的json数据(是对象形式):
var data_json = {
"sex": '男',
"hobby":["baskte","tennis"],
"introduce": {
"name":"tom",
"age":23
}
};
data: JSON.stringify(data_json),
GSON解析:
BufferedReader reader = request.getReader();
// 读取json数据
StringBuffer buffer = new StringBuffer();
String s;
while ((s = reader.readLine()) != null) {
buffer.append(s);
}
String json = buffer.toString();
System.out.println("json:" + json);
// json解析器,解析json数据
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(json);
// json属于对象类型时
if (element.isJsonObject()) {
JsonObject object = element.getAsJsonObject(); // 转化为对象
// 1. value为string时,取出string
String sex = object.get("sex").getAsString(); System.out.println("sex:" + sex);
// 2. value为array时,取出array
JsonArray hobbies = object.getAsJsonArray("hobby"); //
for (int i = 0; i < hobbies.size(); i++) {
String hobby = hobbies.get(i).getAsString();
System.out.println("hobby:" + hobby);
}
// 3. value为object时,取出object
JsonObject introduce = object.getAsJsonObject("introduce");
String name = introduce.get("name").getAsString();
int age = introduce.get("age").getAsInt();
System.out.println("name:" + name+";age:" + age);
}
解读:
很明显,对于传过来的对象类型的json数据,使用GSON是很方便进行解析的,在得到了json数据对应的JsonObject
对象之后,我们就可以很简单地进行操作了。这种方法是直接获取json中的值,而没有进行java对象的还原(简单情况下,没有必要生成相应的javabean)。
2、json
是数组类型
a