Einführung in die Arbeit mit JSON in Java
JSON (JavaScript Object Notation) ist ein leichtgewichtiges Datenaustauschformat, das in modernen Webanwendungen, APIs und Microservices weit verbreitet ist. In Java ist die Arbeit mit JSON ein wesentlicher Bestandteil der Entwicklung: vom Lesen von Konfigurationsdateien bis zur Interaktion mit RESTful-Diensten. In diesem Artikel werden wir praktisch erläutern, wie man Parsing (Umwandlung von JSON in Java-Objekte) und Serialisierung (Umwandlung von Java-Objekten in JSON) mit den beiden beliebtesten Bibliotheken durchführt: Jackson und Gson.
Wir betrachten reale Codebeispiele, lernen, wie man verschachtelte Strukturen verarbeitet, und analysieren typische Fehler. Am Ende des Artikels werden Sie sicher mit JSON in jedem Java-Projekt arbeiten können.
1. Wichtige Bibliotheken für die Arbeit mit JSON
Jackson vs Gson: Was wählen?
Auf dem Java-Markt gibt es mehrere Bibliotheken für die Arbeit mit JSON, aber zwei davon haben sich zum De-facto-Standard entwickelt:
- Jackson – eine leistungsfähigere und funktionalere Bibliothek. Unterstützt Annotationen, Stream-Verarbeitung und benutzerdefinierte Serialisierer. Empfohlen für Enterprise-Projekte.
- Gson – eine einfache und leichte Bibliothek von Google. Ideal für kleine Projekte und schnelles Prototyping.
Um eine von ihnen einzubinden, reicht es, die entsprechende Abhängigkeit in pom.xml (Maven) oder build.gradle (Gradle) hinzuzufügen.
Einbindung von Jackson (Maven)
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version></dependency>Einbindung von Gson (Maven)
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version></dependency>2. JSON-Parsing: Von einem String zu einem Java-Objekt
Parsing ist der Prozess der Umwandlung eines JSON-Strings in ein Java-Objekt. Betrachten wir beide Ansätze am Beispiel einer einfachen Klasse User.
Erstellung des Datenmodells
public class User { private String name; private int age; private String email;
// Ein leerer Konstruktor ist zwingend erforderlich! public User() {}
// Getter und Setter public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }}Parsing mit Jackson
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonParsingExample { public static void main(String[] args) throws Exception { String json = "{\\"name\\":\\"Ivan\\",\\"age\\":30,\\"email\\":\\"ivan@example.com\\"}"; ObjectMapper mapper = new ObjectMapper(); User user = mapper.readValue(json, User.class); System.out.println("Name: " + user.getName()); System.out.println("Alter: " + user.getAge()); }}Parsing mit Gson
import com.google.gson.Gson;
public class GsonParsingExample { public static void main(String[] args) { String json = "{\\"name\\":\\"Maria\\",\\"age\\":25,\\"email\\":\\"maria@example.com\\"}"; Gson gson = new Gson(); User user = gson.fromJson(json, User.class); System.out.println("Name: " + user.getName()); System.out.println("Email: " + user.getEmail()); }}3. Serialisierung: Von einem Java-Objekt zu JSON
Serialisierung ist der umgekehrte Prozess: Wir nehmen ein Java-Objekt und wandeln es in einen JSON-String um. Dies ist beispielsweise notwendig, um