JSON steht für JavaScript Object Notation — ein irreführender Name, denn mit JavaScript hat es heute wenig zu tun und benutzt wird es von allem. Es ist eine Art, strukturierte Daten als reinen Text zu schreiben, und genau das bekommen Sie, wenn Sie bei einem Dienst den Export Ihres Kontos anfordern, wenn eine App ihre Einstellungen speichert und wenn ein Programm Daten an ein anderes schickt.
Ein kleines Beispiel enthält fast alles, was das Format kann:
{
"name": "Widget",
"price": 4.50,
"inStock": true,
"tags": ["small", "blue"],
"discount": null
}
Geschweifte Klammern enthalten ein Objekt — eine Menge benannter Werte. Eckige Klammern enthalten ein Array — eine geordnete Liste. Und das ist das gesamte Typsystem: Objekte, Arrays, Zeichenketten, Zahlen, true/false und null. Sechs Dinge.
Objekte und Arrays können einander beliebig tief enthalten — so beschreibt JSON komplizierte Strukturen mit so kleinem Wortschatz.
'name' ist ungültig. Jede Zeichenkette und jeder Schlüssel braucht doppelte.name: "Widget" ist ungültig; "name": "Widget" ist richtig.// noch /* */. Die meistbeklagte Lücke in der Geschichte des Formats, und sie war Absicht: Kommentare verleiten dazu, Bedeutung dorthin zu legen, wo Parser nicht hinsehen.Für das Kommentarverbot gibt es einen allgemeinen Behelf: Fügen Sie einen gewöhnlichen Schlüssel wie "_comment" mit Ihrer Notiz als Wert ein. Es ist kein Kommentar — Programme lesen ihn als Daten — aber dort legen alle ihre Erklärungen in Konfigurationsdateien ab.
JSON kann sich von einem Syntaxfehler nicht erholen. Es gibt keine Satzgrenzen wie die Zeilen einer CSV, also kann ein Parser, der auf Unerwartetes stößt, den kaputten Teil nicht überspringen — die gesamte Datei scheitert.
Schlimmer noch: Die gemeldete Zeilennummer ist dort, wo der Parser es bemerkt hat, nicht dort, wo Sie den Fehler gemacht haben. Lassen Sie weit oben eine schließende Klammer weg, erscheint der Fehler ganz am Ende der Datei, denn dort wurde die Struktur erstmals unmöglich. Fehlt ein Komma, zeigt die Meldung oft auf die Zeile nach der, die Sie reparieren müssen.
Nennt ein JSON-Fehler also eine Zeile, sehen Sie sich die Struktur darüber an, nicht die Zeile selbst. Ein Validator oder ein Editor, der zusammengehörige Klammern hervorhebt, findet das weit schneller als Lesen.
Das Erste ist das Gewicht. In XML wird ein Wert von einem öffnenden und einem schließenden Tag umschlossen; in JSON sind es ein Name, ein Doppelpunkt und der Wert. Über eine große Datei hinweg ist das ein erheblicher Unterschied in Größe und Lesbarkeit.
Das Zweite wiegt schwerer: JSONs sechs Typen bilden unmittelbar die Datenstrukturen ab, die jede Programmiersprache ohnehin hat. Ein Objekt wird ein Wörterbuch, ein Array eine Liste, eine Zahl eine Zahl. XML verlangt Auslegung — alles ist Text, bis etwas entscheidet, was es bedeutet.
Was JSON dafür aufgibt, ist alles Dokumenthafte: keine Kommentare, keine Attribute, keine Namensräume und keine Möglichkeit, Text mit Auszeichnung darin darzustellen. Deshalb reisen Daten als JSON und Dokumente bleiben in XML.
Ein flaches Array aus Objekten wandelt sauber um. Eine Liste von Datensätzen mit denselben Feldern ist eine Tabelle: eine Zeile je Objekt, eine Spalte je Schlüssel.
Verschachtelte Daten nicht. Enthält jeder Datensatz ein Array weiterer Objekte — eine Bestellung mit mehreren Positionen, eine Nutzerin mit mehreren Adressen — gibt es keinen ehrlichen Weg, das in ein Raster zu legen. Die Umwandlung flacht es entweder zu Spalten wie items.0.name ab oder verwirft die Verschachtelung ganz.
Das ist keine Schwäche des Konverters. Eine Tabelle ist ein Rechteck, JSON ist ein Baum, und Bäume passen nicht in Rechtecke. Wo die Daten wirklich verschachtelt sind, ist der nützliche Schritt meist, genau den Teil, den Sie brauchen, als flache Liste herauszuziehen, statt die ganze Struktur umwandeln zu wollen.
Ein großer Export ist oft kein einzelnes JSON-Dokument, sondern eine Datei mit einem vollständigen JSON-Objekt je Zeile, genannt JSONL oder NDJSON.
Der Grund ist praktisch: Ein einziges riesiges JSON-Array muss vollständig in den Speicher gelesen werden, bevor irgendetwas damit geschehen kann, und ohne die Datei neu zu schreiben lässt sich nichts anhängen. Ein Objekt je Zeile lässt sich zeilenweise verarbeiten und endlos erweitern.
Trägt eine Datei .jsonl oder .ndjson oder öffnet sie sich als viele Zeilen, die je mit { beginnen, ist es das — und ein gewöhnlicher JSON-Parser scheitert daran, weil die Datei als Ganzes kein gültiges JSON ist.
Alles, was dazu über Markdown gilt, gilt hier. JSON öffnet in jedem Texteditor, überlebt das Verschwinden jeder Software, ist mit gewöhnlichen Mitteln durchsuchbar und lässt sich zwischen Fassungen zeilenweise vergleichen.
Der eine praktische Schritt ist, es vor dem Lesen formatiert auszugeben. Exportiertes JSON kommt oft als eine einzige riesige Zeile. Jeder Formatierer oder brauchbare Editor rückt es neu ein, ohne die Daten zu ändern.
"_comment"-Schlüssel, wenn Sie eine Notiz brauchen