Java Gson-Bibliothek

Java 常用类库Gängige Java-Bibliotheken


Gson ist eine von Google bereitgestellte Java-Bibliothek zum Konvertieren von Java-Objekten in eine JSON-Darstellung (Serialisierung) und zum Konvertieren von JSON-Zeichenfolgen in Java-Objekte (Deserialisierung).

Zu den Hauptfunktionen von Gson gehören:

  • Einfache und benutzerfreundliche API
  • Keine Annotationen in Java-Klassen erforderlich (aber Annotationen werden unterstützt)
  • Hohe Leistung
  • Unterstützung für Generics
  • Unterstützung für benutzerdefinierte Serialisierung und Deserialisierung

Kernklassen:

  • Gson: Hauptklasse, bietet Methoden zur Serialisierung und Deserialisierung

  • JsonElement: Abstrakte Klasse für JSON-Elemente

  • JsonObject: Darstellung eines JSON-Objekts
  • JsonArray: Darstellung eines JSON-Arrays


Warum Gson verwenden?

Bei der Java-Entwicklung müssen wir häufig JSON-Daten in den folgenden Szenarien verarbeiten:

  • Interaktion mit RESTful APIs
  • Lesen und Schreiben von Konfigurationsdateien
  • Datenpersistenz
  • Datenaustausch zwischen verschiedenen Systemen

Gson bietet eine einfache und effiziente Möglichkeit, diese Aufgaben zu erledigen, und ist bequemer als die native JSON-Verarbeitung von Java.


Grundlegende Verwendung von Gson

Gson-Abhängigkeit hinzufügen

Zuerst müssen Sie die Gson-Abhängigkeit zu Ihrem Projekt hinzufügen. Wenn Sie Maven verwenden, können Sie sie zu pom.xml hinzufügen:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.9</version>
</dependency>

Ein einfaches Beispiel für die Konvertierung zwischen Java- und JSON-Objekten:

Beispiel

import com.google.gson.Gson;

public class GsonDemo {
    public static void main(String[] args) {
        Gson gson = new Gson();
       
        // Java-Objekt in JSON konvertieren
        Person person = new Person("Zhang San", 30);
        String json = gson.toJson(person);
        System.out.println(json); // Ausgabe: {"name":"Zhang San","age":30}
       
        // JSON in Java-Objekt konvertieren
        Person parsedPerson = gson.fromJson(json, Person.class);
        System.out.println(parsedPerson.getName()); // Ausgabe: Zhang San
    }
}

class Person {
    private String name;
    private int age;
   
    // Konstruktor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
   
    // Getter-Methoden (Gson erfordert Getter/Setter)
    public String getName() { return name; }
    public int getAge() { return age; }
}

Gson-Instanz erstellen

Gson gson = new Gson();

Java-Objekt zu JSON (Serialisierung)

Beispiel

class User {
    private String name;
    private int age;
   
    // Konstruktor, Getter und Setter ausgelassen
}

User user = new User("Zhang San", 25);
String json = gson.toJson(user);
// Ausgabe: {"name":"Zhang San","age":25}

JSON zu Java-Objekt (Deserialisierung)

Beispiel

String json = "{\"name\":\"Li Si\",\"age\":30}";
User user = gson.fromJson(json, User.class);
System.out.println(user.getName()); // Ausgabe: Li Si

Häufige Funktionen

Umgang mit Sammlungen

Beispiel

// Sammlung serialisieren
List<Person> people = Arrays.asList(
    new Person("Wang Wu", 28),
    new Person("Zhao Liu", 32)
);
String jsonList = gson.toJson(people);

// Sammlung deserialisieren
Type listType = new TypeToken<List<Person>>(){}.getType();
List<Person> parsedPeople = gson.fromJson(jsonList, listType);

Datumsverarbeitung

Beispiel

Gson gson = new GsonBuilder()
    .setDateFormat("yyyy-MM-dd HH:mm:ss")
    .create();

Date now = new Date();
String dateJson = gson.toJson(now);
Date parsedDate = gson.fromJson(dateJson, Date.class);

Umgang mit dem Baummodell

Beispiel

String json = "{\"name\":\"Li Si\",\"age\":25}";
JsonElement element = JsonParser.parseString(json);
JsonObject object = element.getAsJsonObject();
String name = object.get("name").getAsString();
int age = object.get("age").getAsInt();

Häufige Konfigurationen

Schönformatierung

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

Nullwertbehandlung

Gson gson = new GsonBuilder()
    .serializeNulls() // 序列化null值
    .create();

Feldbenennungsstrategie

Gson gson = new GsonBuilder()
    .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
    .create();
// 会将userName转换为user_name

Erweiterte Funktionen von Gson

Umgang mit komplexen Objekten

Gson kann komplexe Datenstrukturen mit verschachtelten Objekten, Arrays, Sammlungen usw. verarbeiten:

Beispiel

class Order {
    private String orderId;
    private List<Product> products;
    // Weiterer Code ausgelassen
}

Order order = new Order("123", Arrays.asList(
    new Product("Mobiltelefon", 1, 2999.00),
    new Product("Kopfhörer", 2, 199.00)
));

String json = gson.toJson(order);

TypeToken zur Handhabung von Generics verwenden

Wenn Sie generische Sammlungen verarbeiten müssen, können Sie TypeToken verwenden:

Beispiel

String json = "[{\"name\":\"Apple\",\"price\":5.5},{\"name\":\"Banana\",\"price\":3.2}]";

Type productListType = new TypeToken<List<Product>>(){}.getType();
List<Product> products = gson.fromJson(json, productListType);

Benutzerdefinierte Serialisierung und Deserialisierung

Sie können die Verarbeitungslogik anpassen, indem Sie die Schnittstellen JsonSerializer und JsonDeserializer implementieren:

Beispiel

public class DateSerializer implements JsonSerializer<Date> {
    private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
   
    @Override
    public JsonElement serialize(Date date, Type type, JsonSerializationContext context) {
        return new JsonPrimitive(format.format(date));
    }
}

// Benutzerdefinierten Serializer verwenden
Gson gson = new GsonBuilder()
    .registerTypeAdapter(Date.class, new DateSerializer())
    .create();

Annotationen verwenden

Gson bietet einige nützliche Annotationen:

Beispiel

class User {
    @SerializedName("user_name")  // JSON-Feldname
    private String name;
   
    @Expose(serialize = false)   // Nicht serialisiert
    private String password;
   
    @Since(1.0)                  // Versionskontrolle
    private String email;
}

GsonBuilder-Konfiguration

GsonBuilder bietet verschiedene Konfigurationsoptionen:

Beispiel

Gson gson = new GsonBuilder()
    .setPrettyPrinting()         // Formatierte Ausgabe
    .serializeNulls()           // Nullwerte serialisieren
    .setDateFormat("yyyy-MM-dd") // Datumsformat
    .disableHtmlEscaping()       // HTML-Escaping deaktivieren
    .create();

Leistungsüberlegungen

  • Gson-Instanzen wiederverwenden: Gson ist threadsicher, daher wird empfohlen, sie wiederzuverwenden, anstatt sie häufig zu erstellen
  • Bei großen Datenmengen sollte die Verwendung der Streaming-API (JsonReader/JsonWriter) in Betracht gezogen werden
  • Komplexe Objektstrukturen können die Leistung beeinträchtigen

Vergleich von Gson mit anderen JSON-Bibliotheken

Merkmal Gson Jackson org.json
Benutzerfreundlichkeit Hoch Mittel Hoch
Leistung Mittel Hoch Niedrig
Funktionale Vollständigkeit Hoch Sehr hoch Niedrig
Community-Unterstützung Hoch Sehr hoch Mittel

Zusammenfassung

Gson ist eine leistungsstarke und dennoch einfache JSON-Verarbeitungsbibliothek, geeignet für die meisten Java-Projekte. Sie bietet:

  • Einfaches API-Design
  • Flexible Konfigurationsoptionen
  • Gute Leistung
  • Umfangreiche Funktionen

Für einfache JSON-Verarbeitungsanforderungen ist Gson oft die erste Wahl für Java-Entwickler. Für hohe Leistungsanforderungen oder komplexe Szenarien können SieJacksonund andere Bibliotheken in Betracht ziehen.

Java 常用类库Gängige Java-Bibliotheken

Weitere Erweiterungen