如何使用
见 Java Gson:JsonElement 及其子类的使用。
源码分析
JsonElement 是一个抽象类,子类有 JsonArray 、JsonObject、JsonNull、JsonPrimitive 等。
架构:
JsonElement
🔽
Streams
🔽
TypeAdapters.JSON_ELEMENT
🔽
JsonWriter / JsonReader
🔽
String
JsonArray
用于处理数组。 类中定义了一个list 保存数组元素:
private final List<JsonElement> elements;
JsonObject
用于处理键值对。 类中定义了一个 map 保存键值对。
private final LinkedTreeMap<String, JsonElement> members =
new LinkedTreeMap<String, JsonElement>();
JsonPrimitive
用于处理基本类型,包括 Boolean、Number、String、Character。
类中定义了一个对象来保存基本类型的值:
private final Object value;
JsonNull
用于处理 null。什么都不存。
序列化
使用 toString() 方法即可序列化。
@Override
public String toString() {
try {
StringWriter stringWriter = new StringWriter();
JsonWriter jsonWriter = new JsonWriter(stringWriter);
jsonWriter.setLenient(true);
Streams.write(this, jsonWriter);
return stringWriter.toString();
} catch (IOException e) {
throw new AssertionError(e);
}
}
反序列化
JsonParser 类中的 parse 系列方法可以将 JSON 字符串反序列化为 JsonElement 。底层调用的 Streams.parse 方法。