HOWTO · Java
Umgang mit JSON-Arrays in Java
Dieser Artikel behandelt das JSON-Framework, seine Struktur, Datentypen und seine Verwendung in Java.
Auf dieser Seite
Um ein JSON-Array aus einer Datei in Java einzulesen, fügen Sie Ihrem Projekt einen JSON-Parser wie JSON.simple hinzu, parsen Sie die Datei und durchlaufen Sie anschließend das resultierende Array. Java enthält in seinen Standardbibliotheken keinen universellen JSON-Parser. JSON.simple ist eine externe Abhängigkeit, die Sie über das Build-Tool oder den Abhängigkeitsmanager Ihres Projekts einbinden müssen.
JSON.simple gibt es in mehreren Releases und API-Linien. Das folgende Beispiel verwendet die API-Familie org.json.simple. Wählen Sie vor der Verwendung ein Release aus und prüfen Sie dessen Dokumentation zu Abhängigkeitskoordinaten, Parser-API und Werttypen. Hier wird weder ein bestimmtes Release noch ein Build-Tool vorausgesetzt. Falls Ihr ausgewähltes Release andere Pakete oder Methodensignaturen verwendet, passen Sie das Beispiel anhand der zugehörigen Dokumentation an, statt eine nicht passende Abhängigkeitsdeklaration zu übernehmen.
JSON-Arrays in Java verarbeiten
JSON (JavaScript Object Notation) stellt Daten als Objekte, Arrays, Zeichenfolgen, Zahlen, boolesche Werte und null dar. Java-Code benötigt einen Parser, um JSON-Text in Werte umzuwandeln, mit denen er arbeiten kann. JSON.simple ist eine Möglichkeit für diesen Parsing-Schritt.
Ein Array ist eine geordnete Folge von Werten in eckigen Klammern. Ein Objekt ist eine Sammlung benannter Werte in geschweiften Klammern. Arrays und Objekte können verschachtelt sein. Daher kann eine Datei mit einem Array beginnen, dessen Elemente Objekte sind, die wiederum weitere Arrays oder Objekte enthalten.
JSON-Objekte und JSON-Arrays in Java
Ein Objekt ordnet Werte Zeichenfolgenschlüsseln zu. Zwischen jedem Schlüssel und seinem Wert steht ein Doppelpunkt, die Einträge werden durch Kommas getrennt. In einem Array werden Werte nach ihrer Position gespeichert und ebenfalls durch Kommas getrennt. Der eingebettete JSON-Wert [1, "abc", {"name":"xyz"}] ist beispielsweise ein Array mit einer Zahl, einer Zeichenfolge und einem Objekt. Das Objekt enthält den Schlüssel name, dessen Wert eine Zeichenfolge ist.
Die Beispieldatei enthält auf oberster Ebene ein Array mit einem Objekt. Dieses Objekt enthält eine Zeichenfolge, eine Zahl, zwei verschachtelte Arrays und ein verschachteltes Objekt:
[{"name":"MMN","roll":24,"marks":[91,95,97,97,94],"parents":{"name":"IMT","mobile":"1234567890"},"hobbies":["sports","reading","music"],"others":["A",1]}]
Die Struktur ist beim Auslesen der Werte entscheidend: Code, der name, roll oder parents ausliest, setzt voraus, dass diese Schlüssel vorhanden sind und die erwarteten JSON-Typen enthalten. Bei Eingaben, die Sie nicht kontrollieren, sollten Sie jeden Wert prüfen, bevor Sie ihn als bestimmten Java-Typ behandeln.
Ein JSON-Array mit JSON.simple aus einer Datei in Java lesen
Binden Sie JSON.simple über den Abhängigkeitsmanager Ihres Projekts ein. Verwenden Sie die für das genau ausgewählte Release dokumentierten Artefaktkoordinaten. Dieser Artikel gibt keine Koordinaten vor, da kein bestimmtes Release oder Build-Tool festgelegt ist. Die Paketfamilie org.json.simple ist extern. Ihre Importe und Parser-Aufrufe funktionieren daher nicht in einer reinen Java-Umgebung, solange die passende Bibliothek nicht im Klassenpfad liegt.
In einem Projekt mit einem kompatiblen JSON.simple-Release sieht der Parsing-Schritt konzeptionell so aus: new JSONParser().parse(reader). Prüfen Sie die genaue Parser-API und die zurückgegebenen Collection-Typen in der Dokumentation dieses Releases. Das folgende Beispiel konzentriert sich auf den nächsten Schritt: das Durchlaufen der Java-Collections, nachdem ein Parser sie erzeugt hat. Die Werte entsprechen der Beispieldatei oben. Das Beispiel verwendet ausschließlich Collections aus der Java-Standardbibliothek und kann daher eigenständig ausgeführt werden.
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class JSONArrayTraversal {
public static void main(String[] args) {
Map<String, Object> parents = new LinkedHashMap<>();
parents.put("name", "IMT");
parents.put("mobile", "1234567890");
Map<String, Object> record = new LinkedHashMap<>();
record.put("name", "MMN");
record.put("roll", 24);
record.put("marks", Arrays.asList(91, 95, 97, 97, 94));
record.put("parents", parents);
record.put("hobbies", Arrays.asList("sports", "reading", "music"));
record.put("others", Arrays.asList("A", 1));
List<Map<String, Object>> records = Arrays.asList(record);
for (Map<String, Object> item : records) {
System.out.println("Name: " + item.get("name"));
System.out.println("Roll: " + item.get("roll"));
System.out.println("Marks: " + item.get("marks"));
System.out.println("Hobbies: " + item.get("hobbies"));
Map<?, ?> parent = (Map<?, ?>) item.get("parents");
System.out.println("Parent's Name: " + parent.get("name")
+ ", Mobile: " + parent.get("mobile"));
System.out.println("Others: " + item.get("others"));
}
}
}
Name: MMN
Roll: 24
Marks: [91, 95, 97, 97, 94]
Hobbies: [sports, reading, music]
Parent's Name: IMT, Mobile: 1234567890
Others: [A, 1]
In einer Anwendung übergeben Sie den vom ausgewählten JSON.simple-Parser zurückgegebenen Wert an einen Traversierungscode, den Sie an die Collection-Typen dieses Releases angepasst haben. Hier steht records stellvertretend für das geparste Array auf oberster Ebene. Die Typumwandlungen und Feldzugriffe hängen vom Beispielschema ab. Wenn die Eingabe variieren kann, prüfen Sie jedes Array-Element und jedes Feld, bevor Sie sich auf dessen Typ verlassen. Lassen Sie den Reader während des Parsens geöffnet und schließen Sie ihn danach, auch wenn beim Parsen ein Fehler auftritt. Behandeln Sie Datei- und Parsingfehler entsprechend dem dokumentierten Verhalten des ausgewählten Releases und den Anforderungen Ihrer Anwendung. Wenn Sie diese Traversierung mit einer Datei verbinden, geben Sie einen Pfad an, der in Ihrer Umgebung vorhanden und lesbar ist.
Fazit
Ein JSON-Array ist eine geordnete Folge von Werten, während ein JSON-Objekt benannte Werte Schlüsseln zuordnet. Um ein Array aus einer Datei in Java einzulesen, verwenden Sie einen externen Parser wie JSON.simple, binden Sie die für das ausgewählte Release dokumentierte Abhängigkeit in Ihr Projekt ein und durchlaufen Sie anschließend die geparste Struktur entsprechend dem Eingabeschema. Prüfen Sie die API und die numerischen Werttypen des ausgewählten Releases, bevor Sie sich auf Typumwandlungen oder Konvertierungen verlassen.