JSON Das Standardformat für Datenaustausch
Effizienter Datenaustausch zwischen Anwendungen und Systemen ist von entscheidender Bedeutung. JSON (JavaScript Object Notation) hat sich als ein Standardformat etabliert, das diese Aufgabe mit Bravour meistert. Doch was ist die Natur von JSON? ist es noch mehr als ein Nebenprodukt von JavaScript, dass sich zufälligerweise als praktisch in der API-Welt herausgestellt hat?
Was ist JSON?
JSON ist ein textbasiertes Datenformat, das sowohl für Menschen lesbar als auch für Maschinen einfach zu verarbeiten ist. Es basiert auf der JavaScript-Syntax, ist aber unabhängig von der Programmiersprache und wird in vielen verschiedenen Kontexten eingesetzt.
Nun…
“textbasiertes Datenformat” grenzt die breite Palette an Datenformaten zwar ein, jedoch können wir JSON im positiven als primitiver betrachten. Lasst uns herausfinden, ob “Ursprünglich & Einfach” JSON besser beschreiben?!
JSONs Essenz
Der Ursprung von JSON liegt in der Art und Weise, wie wir Menschen seit jeher Daten organisiert und strukturiert haben. Tabellen sind ein Paradebeispiel dafür: Wir ordnen Informationen in Zeilen und Spalten, um Muster und Beziehungen leichter zu erkennen.
JSON geht einen ähnlichen Weg, fügt jedoch eine weitere Ebene hinzu. Um die Essenz greifen zu können und die Grundstruktur zu bestimmen, vergleichen wir beide Formate miteinander.
Tabellen mit Bäumen vergleichen
Das ist eine sehr schlichte Tabelle, die 4 Werte trägt (Datensatz 11-22), umrandet von Bezeichnern, auch Schlüssel genannt (Zeile 1-2, Spalte 1-2).
Achse | Spalte 1 | Spalte 2 |
---|---|---|
Zeile 1 | Datensatz 11 | Datensatz 12 |
Zeile 2 | Datensatz 21 | Datensatz 22 |
Sowohl Datenbanken als auch Tabellenkalkulationsprogramme nutzen die einzelnen Spalten- und Zeilen-Schlüssel (Spalte 1-2 / Zeile 1-2) als Referenzpunkte. Der Mensch hebt diese gerne hervor, da er diese optisch verarbeitet und die Maschine nutzt diese Referenz zur Kalkulation oder Sortierung der Daten.
In JSON finden wir diese Konzepte in ähnlicher Weise wieder, aber in einer flexibleren Baumform / Baumstruktur. Dieses Beispiel enthält sowohl Zeilen- als auch Spaltenbezeichner (Schlüssel).
{
"Zeile 1": {
"Spalte 1": "Datensatz 11",
"Spalte 2": "Datensatz 12"
},
"Zeile 2": {
"Spalte 1": "Datensatz 21",
"Spalte 2": "Datensatz 22"
}
}
Auffällig ist, dass sich die Schlüssel der Spalten (1-2) wiederholen. Diese Redundanz betrachten wir später näher. Wie wir bereits wissen, sind Zeilen- und Spaltenbezeichner nicht immer notwendig. Wenn auf eine explizite Bezeichnung verzichtet werden kann und die Position aufgrund der Ordnung ausreichend ist.
Wir entfernen eine Achse mit Schlüsseln.
Spalte 1 | Spalte 2 |
---|---|
Datensatz 11 | Datensatz 12 |
Datensatz 21 | Datensatz 22 |
In JSON können wir diese Tabelle mit Schlüsseln auf nur einer Achse, so darstellen.
{
"Spalte 1": [
"Datensatz 11",
"Datensatz 21"
],
"Spalte 2": [
"Datensatz 12",
"Datensatz 22"
]
}
Diese Variante hat keinerlei Redundanzen.
Entfernen wir die Schlüssel auf beiden Achsen, sieht die Tabelle folgend aus:
Datensatz 11 | Datensatz 21 |
Datensatz 21 | Datensatz 22 |
JSON:
[
[
"Datensatz 11",
"Datensatz 12"
],
[
"Datensatz 21",
"Datensatz 22"
]
]
Letztlich lediglich Listen in Listen. Das sieht einer Tabelle schon sehr ähnlich aus.
Wir schließen den groben Vergleich mit der kleinsten Einheit ab. Es existiert nur der Wert einer einzelnen Zelle:
Datensatz 11 |
In JSON wäre es ohne weitere Klammern der Wert in Anführungszeichen.
"Datensatz 11"
Struktur Informationsträger
Kommen wir zu einer der grundlegendsten Entscheidungen, die JSON getroffen hat: Der Verarbeiter trägt keine Informationen über die Struktur vor der Verarbeitung.
Um diesen Satz zu erklären, ziehen wir wieder die Tabellenstruktur heran. Diese Tabelle zeigt genau 4 Datensätze an.
Schlüssel | Schlüssel |
---|---|
Datensatz | Datensatz |
Datensatz | Datensatz |
Denken wir uns jede strukturelle Information (rot, sowohl Schlüssel als auch die räumliche Trennung) weg, würde ein Haufen an nicht darstellbaren Werte daraus folgen. Diese Informationen werden meist von der Datei (Datenformat) selbst und von dem verarbeitenden Programm (z.B. Tabellenkalkulation) getragen.
Bedienen wir uns einer CSV-Datei, um zu erklären, wer diese Information in Tabellen trägt. Eine CSV-Datei besteht aus beliebig vielen mit einem Trenner aneinander gereihten Werten.
Beispiel einer vollständigen CSV-Datei.
Schlüssel 1,Schlüssel 2
Datensatz 11, Datensatz 12
Datensatz 21, Datensatz 22
Nach Definition kann die erste Zeile als Kopfdatensatz der die Spalten bezeichnet dienen. Das bedeutet, dass das verarbeitende Programm diese Definition (Information über die Kopfzeilen-Struktur) kennen, tragen und verarbeiten können muss. Die restliche Struktur wird mithilfe von Trennzeichen (Komma) und Zeilenumbrüchen bestimmt und in der Datei wiedergegeben.
Diesem Grundprinzip folgen alle Tabellen-Datenformate. Ein Teil der Informationen enthält die Datei selbst und der Rest ist dem verarbeiteten Programm durch feste Definitionen bekannt. JSON kann seine Baumstruktur nicht allgemeingültig zuvor bestimmen, so dass Entwickler Programme schreiben könnten, die diese Informationen tragen. Das stellt uns vor Herausforderungen in der Verarbeitung, bringt aber auch eine willkommene Flexibilität in die technologische Landschaft.
Werfen wir einen Blick auf JSONs Grundbausteine und wie sich aus deren Ästen die Baumstruktur formt.
Die Architektur von JSON
JSONs Bausteine
JSON verfügt über keine rein strukturellen Parameter oder Definitionen. JSON besteht lediglich aus 4 möglichen Bausteinen / Instanzen, deren Verwendung und Kombination die Struktur des Baumes bestimmt.
- Wert
- String: Text in doppelten Anführungszeichen.
- Zahl: Ganze Zahlen oder Gleitkommazahlen.
- Boolean: Wahrheitswerte (true oder false).
- Arrays: Geordnete Listen von Elementen (Wert, Array, Objekt, null) in eckigen Klammern.
- Objekte: Sammlungen von Schlüssel-Wert-Paaren (ungeordnet) in geschweiften Klammern.
- null: Repräsentiert einen leeren Wert.
Beginnen wir mit einer einzelnen Instanz. JSON kann aus genau null, einem Wert, einer Liste oder einer Schlüssel-Wert-Paar-Sammlung bestehen.
Folgende Beispiele zeigen vollständige und valide JSON-Dateien.
Einfach nur null.
null
Eine Ganz- oder Gleitzahl
1
Eine Zeichenkette
"Ein String"
Eine Liste an Elementen. Diese könnte auch Objekte oder weitere Listen tragen.
[1,null,"Ein String"]
Ein Objekt, welches Werte, Listen und Objekte über ihre Schlüssel zugänglich macht.
{
"name": "Mani",
"age": 35,
"verified": true,
"colleagues": [],
"spezifikations": {}
}
Nun haben wir alle Äste und Blätter des JSON-Baumes kennengelernt und haben ein Gefühl, welche verschachtelten Strukturen damit formbar sind. Des Weiteren ist uns bekannt, dass wir durch Objekte Werte mit Schlüssel bestücken können. Wir definieren mit JSONs Ästen, deren Knospen und Blätter sowohl die Datenstruktur, die Daten-Bezeichnung /-Referenz sowie den Datensatz selbst.
Baumstruktur
Die Baumstruktur ist eine fundamentale Organisationsform, die sich in der Natur und in vielen wissenschaftlichen Bereichen manifestiert hat.
Informationsdarstellung vs. algorithmische Optimierung
Bekannte Baumstrukturen aus dem informationstechnologischen Bereich sind XML, DOM, Sortier- und Komprimierungsbäume. XML und DOM konzentrieren sich auf die Darstellung und Strukturierung komplexer Daten und Sortier- und Komprimierungsbäume sind darauf ausgelegt, bestimmte Operationen (wie Suchen, Sortieren oder Komprimieren) effizient auszuführen.
Betrachten wir die JSON-Baumstruktur näher, um diese besser einordnen zu können.
JSON-Baumstruktur in Stichpunkten
- Hierarchisch: JSON-Daten sind hierarchisch organisiert, mit einem Wurzelelement (entweder einem Objekt oder einem Array), das sich in verschachtelte Objekte und Arrays verzweigt.
- Knoten & Blätter: Jeder Knoten in der Baumstruktur repräsentiert einen Wert.
- Objektknoten: Haben untergeordnete Knoten, die Schlüssel-Wert-Paare sind.
- Arrayknoten: Haben untergeordnete Knoten, die indizierte Werte sind.
- Primitive Wertknoten (Blatt): String, Zahl, Boolean, Null. Diese haben keine untergeordneten Knoten.
- Eltern-Kind-Beziehungen: Objekte und Arrays sind Elternknoten, ihre Inhalte (Schlüssel-Wert-Paare oder Elemente) sind Kindknoten.
- Keine Zyklen: Eine echte JSON-Struktur ist ein Baum, keine zyklische Struktur (kein Knoten kann sich selbst als Vorfahren haben).
- Ordnung: Die Reihenfolge der Elemente in Arrays ist signifikant. Die Reihenfolge von Schlüssel-Wert-Paaren in Objekten sollte nicht als signifikant betrachtet werden (obwohl einige Parser die Reihenfolge beibehalten).
Knoten, Äste und Blätter in der JSON-Baumstruktur
Ein JSON-Dokument wird als Baumstruktur dargestellt. Die grundlegenden Bausteine dieser Struktur sind Knoten.
- Knoten: Jeder Knoten repräsentiert einen Wert.
- Innere Knoten (Äste): Knoten, die andere Knoten enthalten, werden als innere Knoten oder Äste bezeichnet. In JSON sind dies Objekte und Arrays.
- Blattknoten (Blätter): Knoten, die keine anderen Knoten enthalten, werden als Blattknoten oder Blätter bezeichnet. In JSON sind dies die primitiven Werte (Strings, Zahlen, Booleans und Null).
Im folgenden Schritt visualisieren wir eine Bestellung im JSON-Format als Baumstruktur.
{
"orderId": "A12345",
"customer": {
"name": "Jane Doe",
"email": "jane.doe@example.com",
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY",
"zipCode": "10001"
},
"isMember": true
},
"products": [
{
"productId": "P001",
"name": "Wireless Mouse",
"quantity": 2,
"price": 25.5,
"image": "https://example.com/wireless-mouse.jpg",
"color": "#3498db"
},
{
"productId": "P002",
"name": "Keyboard",
"quantity": 1,
"price": 45,
"image": "https://example.com/keyboard.jpg",
"color": "#2ecc71"
}
],
"orderDate": "2025-01-02T10:15:30Z",
"status": "Processing",
"isPaid": false,
"totalAmount": 96
}
Dieser JSON-Beispieldatensatz einer Bestellung kann wie folgt visualisiert werden:

Kinder
Betrachten wir das Objekt “Oder Data”, sehen wir, dass die meisten Schlüssel-Werte-Paare einen primitiven Wert tragen. Diese primitiven Datentypen wie null, Strings (“A12345”), Wahrheitswerte (true/false) und Zahlen (96) bilden die Kinder bzw. Blätter, da sie keine Äste haben und Kinder tragen können.
Eltern
Die Datei selbst als Wurzelelement, Objekte und Arrays bilden die Äste und somit die Eltern aller restlichen Datentypen.
Die Datei selbst trägt genau 1 Knoten. Im Beispiel oben trägt das Wurzelelement (die Datei) das Objekt-“Order Data”, welches alle weiteren Kinder und Eltern trägt.
Ein Objekt kann beliebig viele Kinder tragen, jedoch müssen alle mit Schlüssel versehen sein. “Oder-Data” hat 7 Knoten, davon sind 5 Blätter.
Ein Array (Liste) kann beliebig viele Kinder in Reihenfolge tragen. Dabei darf der Datentyp (Objekt, null, Array, primitive Werte) nach Belieben genutzt werden. In unserem Beispiel trägt unsere Liste [products] Objekte.
Spezifikationen und Versionierung
Es ist üblich, dass Daten und Dateiformate (XML, .html, .pdf) ihre Version mit sich tragen. Anwendungsentwickler lesen die Spezifikationen der entsprechenden Version und bauen auf dieser Grundlage Programme.
XML
Spezifikation:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
HTML trug eine Version, mit HTML5, sich selbst als Obermenge sehend, wurde diese entfernt. Mehr dazu unter folgendem Link:
https://html.spec.whatwg.org/multipage/introduction.html#history-2
Die Version eines PDF-Dokuments wird im Header der Datei angegeben. Einträge wie '%PDF-1.7' zeigen die jeweilige Version an.
Öffnet man ein PDF-Dokument mit einem Texteditor sieht das ungefähr so aus:
%PDF-1.4
%Óëéá
1 0 obj
<</Title <04F0040740301007...>
/Producer (Skia/PDF Google Docs Renderer)>>
endobj
1 0 obj
<</Filter /FlateDecode
/Length 6479>> stream
xœí]ÛŽ$9n}¯¯¨X$’º ƒú2³öö`{0à ¯ÿ0Y]‘AfJ*Vv¯±Óƒ¾dT*$Š¢x=LÏ‘ý!ño
óó¿ÿ÷Óÿ<…JÛ§ßÿäÓ³üú·?=_þò·¿>ýò'xþëÿ>ÉóÚñ9¥Ïûϧ¿<ýëÕ5Ëÿ<FÜ>â1.yã—JÏ¿þú¿üóWþüüüõËÓçoO¿üŽÏCÙ
µ¤šúó·ÿxþ5ÆüõÏßþë)Õ±Êxœí]ÛŽ$9n}¯¯¨X$’º ƒú2³öö`{0à ¯ÿ0Y]‘AfJ*Vv¯±Óƒ¾dT*$Š¢x=LÏ‘ý!ño
óó¿ÿ÷Óÿ<…JÛ§ßÿäÓ³üú·?=_þò·
Nachzulesen in der Spezifikation: https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/pdfreference1.4.pdf
JSONs Versionsnummer und Spezifikation
Der Entdecker (Crockford) entschied sich gegen die Versionierung der JSON-Definition mit folgenden Worten:
Die wahrscheinlich kühnste Designentscheidung, die ich getroffen habe, war, JSON keine Versionsnummer zu geben, so dass es keinen Mechanismus für eine Überarbeitung gibt. Wir sitzen auf JSON fest: Was auch immer es in seiner jetzigen Form ist, das ist es.
Diese Entscheidung, gepaart mit einigen undefinierten Aspekten der prägnanten Grammatik, führte zu verschiedenen Interpretationen und somit Spezifikationen. Anders gesagt, da der Entdecker von JSON nicht alle Fälle ausformuliert hat, taten es andere.
Der Ursprung. Er ist sehr knapp, doch elegant formuliert.
https://www.json.org/json-de.html
Weitere Interpretationen von JSON:
- 2006 - IETF RFC 4627, das den MIME-Medientyp application/json festlegte
- 2011 ECMAScript 262, Abschnitt 15.12
- 2013 ECMA 404
- 2014 IETF RFC 7158 macht die Spezifikation zu "Standard Tracks" anstelle von "Informational", erlaubt Skalare (alles andere als Arrays und Objekte) wie 123 und true auf der obersten Ebene wie ECMA, warnt aber vor schlechten Praktiken wie doppelten Schlüsseln und fehlerhaften Unicode-Strings, ohne sie jedoch explizit zu verbieten.
- 2014- IETF RFC 7159 wurde veröffentlicht, um einen Tippfehler in RFC 7158 zu beheben, das vom "März 2013" statt vom "März 2014" datiert war.
- 2017 IETF RFC 8259 wurde im Dezember 2017 veröffentlicht. Es fügt im Wesentlichen zwei Dinge hinzu: 1) außerhalb von geschlossenen Ökosystemen MUSS JSON in UTF-8 kodiert sein und 2) JSON-Text, der nicht über das Netzwerk übertragen wird, KANN nun die Bytereihenfolgemarke U+FEFF hinzufügen, obwohl dies nicht explizit angegeben ist.
Ohne Versionsnummer, zugleich mit undefinierten Aspekten, hat JSON durch seine Flexibilität und Anpassungsfähigkeit seinen Weg zum “Standard” und in die technologische Landschaft gefunden.
Vorteile von JSON
Leichtgewichtig und schnell
JSON ist im Vergleich zu anderen Datenformaten wie XML sehr kompakt. Das reduziert die Übertragungszeiten und den Speicherbedarf, was besonders wichtig im Web ist, wo schnelle Ladezeiten entscheidend für eine gute User Experience sind.
Lesbar und verständlich
Die einfache Syntax von JSON macht es sowohl für Menschen als auch für Maschinen leicht lesbar. Entwickler können JSON-Daten schnell erfassen und verstehen, was die Fehlersuche und Wartung erleichtert und die Entwicklung beschleunigt.
Flexibel und vielseitig
JSON unterstützt verschiedene Datentypen wie Strings, Zahlen, Booleans, Arrays und Objekte und kann komplexe Datenstrukturen abbilden. Dadurch eignet es sich für eine Vielzahl von Anwendungsfällen, von einfachen Konfigurationen bis hin zu komplexen Datensätzen.
Sprachunabhängig und universell einsetzbar
JSON kann in vielen Programmiersprachen verwendet werden, darunter JavaScript, Python, Java, C++, PHP und viele mehr. Dies macht JSON zu einem idealen Format für den Datenaustausch zwischen verschiedenen Systemen und Anwendungen.
Anwendungsgebiete von JSON
Web APIs
JSON ist das Standardformat für den Datenaustausch zwischen Webanwendungen und Servern. Moderne Webanwendungen nutzen JSON, um Daten im Hintergrund zu laden und dynamische Inhalte zu erstellen, ohne die Seite komplett neu laden zu müssen.
Konfigurationsdateien
JSON eignet sich hervorragend für die Speicherung von Konfigurationsdaten in Anwendungen und Systemen. Die lesbare Struktur und die einfache Syntax machen es einfach, Konfigurationen zu erstellen, zu verwalten und anzupassen.
Leichtgewichtiger Datenaustausch
JSON wird verwendet, um Daten zwischen verschiedenen Anwendungen und Systemen auszutauschen. Seine Sprachunabhängigkeit macht es zu einem idealen Format für die Integration verschiedener Technologien.
Datenbanken
NoSQL-Datenbanken wie MongoDB speichern Daten im JSON-Format. Dies ermöglicht flexible und skalierbare Datenmodelle, die sich an die Anforderungen der Anwendung anpassen lassen.
Internet of Things (IoT)
JSON wird häufig in IoT-Anwendungen verwendet, um Daten zwischen Geräten und Cloud-Plattformen auszutauschen. Die geringe Größe und die einfache Verarbeitung machen JSON ideal für die Kommunikation in ressourcenbeschränkten Umgebungen.
Fazit
JSON ist ein vielseitiges und effizientes Datenformat, das aus der modernen Softwareentwicklung nicht mehr wegzudenken ist. Seine Einfachheit, Flexibilität und Sprachunabhängigkeit machen es zu einer idealen Wahl für den Datenaustausch in verschiedensten Anwendungsgebieten.