Java Gson 源码分析:JsonElement


#Java Gson#


如何使用

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 方法。


( 本文完 )