GSON

Gson

GSON 是 Google 的 JSON 解析器和 Java 生成器。Google 开发了 GSON 供内部使用,但后来将其开源。GSON 相当容易使用,但我认为它不如 Jackson 优雅。在本 GSON 教程中,我将指导您如何使用 GSON 将 JSON 解析为 Java 对象,以及将 Java 对象序列化为 JSON。GSON 包含多个可用于 JSON 的 API。本教程介绍了 Gson 组件,该组件将 JSON 解析为 Java 对象,或从 Java 对象生成 JSON。除 Gson 组件外,GSON 在 GSON JsonReader 组件中还具有拉式解析器。

Gson gson = new Gson();

GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();

String json = "{\"brand\":\"Jeep\", \"doors\": 3}";
Gson gson = new Gson();
Car car = gson.fromJson(json, Car.class);

Car car = new Car();
car.brand = "Rover";
car.doors = 5;
Gson gson = new Gson();
String json = gson.toJson(car);

// 美化输出
Gson gson = new GsonBuilder().setPrettyPrinting().create();

类注解

您可以告诉 GSON 从序列中排除 Java 类中的字段。有几种告诉 GSON 排除字段的方法。GSON 教程的以下部分将介绍最有用和最容易使用的排除字段的方法。

Transient Fields

如果您将 Java 类中的字段设为瞬态,则 GSON 将在序列化和反序列化中均将其忽略:

public class Car {
    public transient String brand = null;
    public int    doors = 0;
}

JsonReader

GSON JsonReader 是 GSON 流 JSON 解析器。GSON JsonReader 使您可以读取 JSON 字符串或文件作为 JSON 令牌流。为令牌迭代 JSON 令牌也称为通过 JSON 令牌进行流传输。这就是为什么 GSON JsonReader 有时也称为流 JSON 解析器的原因。

流解析器通常有两种版本:拉式(Pull)解析器和推式(Push)解析器。拉式解析器是一种解析器,当代码准备处理下一个标记时,使用它的代码会将标记从解析器中拉出。推送解析器解析 JSON 令牌并将其推送到事件处理程序中。GSON JsonReader 是拉式解析器。

String json = "{\"brand\" : \"Toyota\", \"doors\" : 5}";

JsonReader jsonReader = new JsonReader(new StringReader(json));

String json = "{\"brand\" : \"Toyota\", \"doors\" : 5}";

JsonReader jsonReader = new JsonReader(new StringReader(json));

try {
    while(jsonReader.hasNext()){
        JsonToken nextToken = jsonReader.peek();
        System.out.println(nextToken);

        if(JsonToken.BEGIN_OBJECT.equals(nextToken)){

            jsonReader.beginObject();

        } else if(JsonToken.NAME.equals(nextToken)){

            String name  =  jsonReader.nextName();
            System.out.println(name);

        } else if(JsonToken.STRING.equals(nextToken)){

            String value =  jsonReader.nextString();
            System.out.println(value);

        } else if(JsonToken.NUMBER.equals(nextToken)){

            long value =  jsonReader.nextLong();
            System.out.println(value);

        }
    }
} catch (IOException e) {
    e.printStackTrace();
}