Gson封装了json解析的步骤。如果我们想了解Gson序列化和反序列化的流程,该从哪里了解呢。个人感觉,手动序列化和反序列化是个不错的方式。
手动的方式就是使用stream包下的JsonReader类来手动实现序列化和反序列化,和Android中的pull解析类似。
1. JsonReader
String json = "{\"userName\":\"张三\",\"userAge\":23,\"userEmail\":\"男\",\"addr\":\"山东\"}";
User userHand = new User();
JsonReader reader = new JsonReader(new StringReader(json));
reader.beginObject(); // throws IOException
while (reader.hasNext()) {
String s = reader.nextName();
switch (s) {
case "userName":
userHand.userName = reader.nextString();
break;
case "userAge":
userHand.userAge = reader.nextInt(); //自动转换
break;
case "userEmail":
userHand.userEmail = reader.nextString();
break;
case "addr":
userHand.addr = reader.nextString();
break;
default:
break;
}
}
System.out.println(userHand.toString()); // User{userName='张三', userAge=23, userEmail='男', addr='山东' 其实自动方式最终都是通过JsonReader来实现的,如果第一个参数是String类型,那么Gson会创建一个StringReader转换成流操作。
如果是其他类型,Gson会进行自动转换。
2.JsonWriter
JsonWriter writer = new JsonWriter(new OutputStreamWriter(System.out));
writer.beginObject() // throws IOException
.name("userName").value("张三")
.name("userAge").value(24)
.name("userEmail").value("男")
.name("addr").nullValue()//演示null
.endObject(); //
writer.flush(); // {"userName":"张三","userAge":24,"userEmail":"男","addr":null}
writer.close();
本文介绍了使用Gson库中JsonReader和JsonWriter进行手动Json序列化和反序列化的概念,强调了这种方式有助于理解Gson的工作流程。手动解析类似于Android的Pull解析,通过JsonReader进行反序列化,而JsonWriter用于序列化。

4680

被折叠的 条评论
为什么被折叠?



