GSON

Gson

GSONGoogleJSON解析器和Java生成器。Google开发了GSON供内部使用,但后来将其开源。GSON相当容易使用,但我认为它不如Jackson优雅。在本GSON教程中,我将指导您如何使用GSONJSON解析为Java对象,以及将Java对象序列化为JSONGSON包含多个可用于JSONAPI。本教程介绍了Gson组件,该组件将JSON解析为Java对象,或从Java对象生成JSON。除Gson组件外,GSONGSON 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 JsonReaderGSONJSON解析器。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();
}