Begriff
JSON (JavaScript Object Notation)
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Sprache des Internets. Wenn ein Server (Python) mit einem Browser (JavaScript) redet, nutzen sie JSON. Es ist Text, den Menschen lesen können.
{
"name": "Max",
"alter": 25,
"hobbys": ["Fußball", "Coden"]
}
Es sieht aus wie JavaScript-Code, ist aber mittlerweile überall Standard (auch in Java, C#, Go). Es hat das alte, komplizierte XML fast vollständig verdrängt.
Merksatz: Ein leichtgewichtiges, textbasiertes Datenaustauschformat, das einfach für Menschen zu lesen und für Maschinen zu parsen ist, basierend auf einer Teilmenge der JavaScript-Syntax.
JavaScript:
JSON.stringify(obj) -> Macht aus Objekt einen String (zum Senden).
JSON.parse(string) -> Macht aus String ein Objekt (zum Benutzen).
Python:
import json
json.loads(string)
json.dumps(obj)
Beachte: Keys müssen immer in doppelten Anführungszeichen stehen ("name"). Einfache ('name') sind verboten (Invalid JSON).
Praxisroutine
In der Praxis lernst du JSON (JavaScript Object Notation), indem du mit einem kleinen, kontrollierten Beispiel beginnst. Baue zuerst einen Minimalfall, prüfe das Ergebnis, veraendere genau eine Sache und beobachte, was sich ändert. Notiere dir Eingabe, Aktion, Ausgabe und typischen Fehler.
Übung: Erstelle ein Beispiel aus deinem Alltag, fuehre den Ablauf gedanklich Schritt für Schritt durch und markiere die Stelle, an der du Feedback oder ein Log brauchst. Wenn du diese Stelle benennen kannst, verstehst du den Begriff praktisch.
1. Datentypen & Limitierungen
JSON kennt nur: String, Number, Boolean, Array, Object, null.
Es kennt kein Datum (Date).
Man muss Datum als String senden ("2023-10-27T10:00:00Z") und manuell parsen.
Es kennt keine Kommentare. (// ist verboten). Das nervt bei Konfigurationsdateien.
Es kennt keine Funktionen.
2. JSON Lines (NDJSON)
Normale JSON-Dateien müssen ein großes Objekt sein. Bei riesigen Daten (Logfiles, 10GB) ist das blöd (man muss alles in den RAM laden). Lösung: JSONL (Newqline Delimited JSON). Jede Zeile ist ein valides JSON-Objekt. Man kann es Zeile für Zeile streamen und verarbeiten.
3. Sicherheit (JSON Hijacking)
Früher (vor ES5) konnte man JSON-Arrays von fremden Seiten klauen, indem man den Array-Konstruktor überschrieb.
Heute gefixt.
Aber: JSON.parse() ist sicher. eval() ist tödlich.
Niemals eval(jsonString) nutzen!
1. Serialisierung und das 64-bit Integer Problem (BigInt)
Die Parsing-Engine deines Browsers konvertiert reine JSON-Strings per JSON.parse() in JS-Variablen in C++.
Der fatale Architektur-Fehler: JavaScript (nach IEEE 754) kennt keine echten Integer. Jede Zahl ist ein 64-Bit Float, welches ab ca. 9 Millionen Billionen (Number.MAX_SAFE_INTEGER, entspr. 53-Bit Präzision) die Genauigkeit verliert.
Sendet z.B. eine Twitter-API rohe UUIDs oder Transaction-IDs einer Blockchain als Integers ({"id": 1044458572186984448}), wird die JS-Parsing-Engine dies beim Import unwiderruflich leise in 1044458572186984400 runden. ID zerstört. Backend-Entwickler müssen große Integers in ihrer API deshalb präventiv immer als String versenden ("id": "1044458..."), wenn der Client das Web ist.
2. JSON Schema Validierung
JSON ist typenlos und unstrukturiert. Erwartet das Backend ein "Alter" (Number) und der Client sendet versehentlich "Alter": "zwanzig", crasht der Datenbank-Driver oft schmutzig ab.
Um das typsichere Validieren von Enterprise-XML zu imitieren, existiert JSON Schema.
Es ist eine beschreibendes JSON-Metadokument: {"type": "object", "properties": {"alter": {"type": "integer", "minimum": 0}}}. C++ Validatoren prüfen den ankommenden API-Payload brutal schnell gegen dieses Schema. Wenn der Check fehlschlägt, feuert das Gateway einen HTTP 400 Bad Request, bevor der fehlerhafte Payload den Server-Hauptcode (Business-Logik) auch nur erahnen kann.
3. Binary JSON (BSON) und MessagePack
JSON als reiner Text (UTF-8 Bytes) hat massiven Parsing-Overhead. Wenn eine Kamera Sensor-Arrays sendet (Millionen Pixelzahlen), liest der CPU-Parser für "5" "2" "," jedes C-Char ein.
High-Performance Systeme in IoT oder DBs (z.B. MongoDB BSON) verpacken JSON als Binärbaum. MessagePack komprimiert {"compact": true} in winzige Bytes 81 a7... durch Prefix-Deklarierungen ("Die nächsten 10 Bytes sind ein Float"). Der Client kann Memory-Pfeile zielen und decodiert rasend schnell. Im Browser Web-Performance-Segment setzt sich alternativ Google's Protobuf durch.
Quick-Check
BSON?
Binary JSON. Genutzt von MongoDB. Kann mehr Typen (Date, Binary Data) und ist effizienter zu durchsuchen (Length Prefixes), aber nicht menschenlesbar.Trailing Comma?
{"a": 1,}. In JS erlaubt, in JSON verboten! Führt oft zu Fehlern.JSON vs XML?
JSON: Kleiner, schneller zu parsen, passt perfekt zu JS. XML: Mächtiger (Namespaces, Validierung via XSD), aber verbos und langsam. Enterprise liebt XML, Web liebt JSON.