Was ist JSON?

Mit JSON steht ein einfacher Standard für eine strukturierte Kodierung und Darstellung von Daten zur Verfügung. Was mit XML (eXtensible Markup Language) in den 1990er Jahren begann, setzt JSON nun mit einem schlanken Datenformat für die Beschreibung von Variablen, Objekten und Arrays fort. Der Anspruch besteht hier in der einfachen und menschenlesbaren Darstellung von Daten. Die Java-Script-Objektbeschreibungen werden von Anwendungsentwicklern sehr häufig in Verbindung mit Ajax verwendet. Für die meisten Programmiersprachen gibt es daher auch entsprechende Parser, die eine JSON-Deklaration in eine passende Entsprechung wie Variablen oder Objekte übersetzen.

Durch die enge Verwandtschaft mit XML und auch YAML erfüllt JSON auch ähnliche Aufgaben. Es speichert unterschiedlichste Daten strukturiert und maschinenlesbar. Daneben besteht auch eine enge Verbindung zur Programmiersprache JavaScript, ist aber auf diese nicht beschränkt und auch nicht hundert Prozent kompatibel. Einzig das einfache Datenformat wurde von JavaScript abgeleitet und dient fortan bevorzugt zur Serialisierung von programminternen Datenstrukturen für die Datenspeicherung und Kommunikation über Schnittstellen.

Struktur und Datentypen in JSON

Bei JSON findet man zwei unterschiedliche und universelle Datenstrukturen. Der Vorteil hierbei ist die breite Unterstützung für eine Vielzahl an Programmiersprachen wie Java, C, C , Perl und Phyton. Die Strukturen untergliedern sich in folgende Typen:

Name/Wert- bzw. Schlüssel/Wert-Paare

{
  "name":"Mustermann"
}

Geordnete Liste von Werten

[
  {
    "vorname" : "Michael",
    "name":"Mustermann",
    "mail" : "Michael.Mustermann@domain.de"
  },
  {
    "vorname" : "Elisa",
    "name":"Bridal",
    "mail" : "Elisa.Bridal@domain.de"
  }
]

Für beide Typendeklarationen gelten jedoch spezielle Syntax-Regeln, die in einigen Punkten auch von der Java-Script-Syntax abweichen und daher nicht direkt kompatibel sind.

  • In einem Wertepaar müssen die Bezeichner bzw. Feldnamen und Werte jeweils in Anführungszeichen gesetzt werden. Beide Daten werden durch einen Doppelunkt voneinander getrennt.

  • Objekte in JSON werden durch geschweifte Klammern definiert. Ein Objekt kann unbegrenzt Daten in Form von Wertepaaren enthalten.

  • Arrays stellen eine geordnete Liste von Wertepaaren dar. Ein Array beginnt mit einer öffnenden eckigen Klammer, den Wertepaaren und einer schließenden eckigen Klammer. Mehrere Wertepaare werden durch Kommata voneinander getrennt.

Diese einfache Syntax wird durch eine überschaubare Zahl an Datentypen weiter vereinfacht. In JSON existieren einige wenige aber nicht minder wichtige Datentypen:

  • Zeichenkette - Eine Zeichenkette kann aus Unicode-Zeichen bestehen und wird mit Anführungszeichen umschlossen. Sie kann auch Escape-Sequenzen mit besonderen Funktionen darstellen.

  • Zahl oder Nummer - Eine Zahl oder Fließkomma-Zahl wird ähnlich wie in Java oder C deklariert, mit Ausnahme von hexadezimalen oder oktalen Formaten.

  • Objekt - Ein Objekt stellt eine Sammlung von kommaseparierten Wertepaaren dar und wird mit geschweiften Klammern zusammengefasst.

  • Array - In einem Array werden Listen von kommaseparierten Wertepaaren aufgelistet. Ein Array wird mit eckigen Klammern umschlossen.

  • Boolean - Ein boolescher Wert kann die Zustände „true“ (wahr) oder „false“ (falsch) annehmen.

  • Null - Der Datentyp Null repräsentiert fehlende Wertangaben bzw. noch nicht bekannte Werte in Attributen um undefinierte Zustände zu vermeiden.

Eine gültige JSON-Schemadeklaration für eine beispielhafte Wechselkursabfrage an der Börse finden Sie im folgenden Beispiel:

{
  "realtime_currency_exchange_rate": {
    "from_currency_code": "BTC",
    "to_currency_code": "CNY",
    "exchange_rate": "43774.50023880",
    "last_refreshed": "2018-09-06 11:25:44",
    "time_zone": "UTC"
  }
}

Deep-Dive - JSON im Detail

In der Anwendungsentwicklung ist es sehr wichtig, dass in JSON abgebildeten Daten vor der Verwendung validiert werden. Eine Validierung beginnt in der Regel mit dem Anwenden eines Daten-Schemas auf die zu prüfende Datenstruktur. Dabei gibt es unterschiedliche Vorgehensweisen. Zum einen kann ein Entwickler bereits im Vorfeld seine Schemata und Testdaten mit entsprechenden Validator-Tools überprüfen. Hier wird das gesetzte Schema auf eine Datenliste angesetzt und überprüft, ob die Daten dem Schema vollständig entsprechen.

Aufgrund der Nähe zu XML und auch YAML darf man jedoch nicht davon ausgehen, dass in JSON alle Datenformate gleich und kompatibel sind. Seit 2017 gelten für JSON zwei unterschiedliche aber synchrone Standards für unterschiedliche Aspekte der Datenformate. Der ECMA-404 Standard definiert die JSON-Syntax, der RFC-8259 zielt inhaltlich auf eine erhöhte Interoperabilität. Es besteht trotz der generischen Abstammung von JavaScript eine teilweise Inkompatibilität, die sich vor allem bei den Datentypen bemerkbar macht.

Ein fester Standard ist bislang immer noch nicht erreicht. Die derzeitigen Drafts repräsentieren nur Vorschläge, die jedoch nur 6 Monate gültig sind und dann „unverbindlich“ werden. Danach wird ein neuer Vorschlag publiziert, der wiederum alle Neuerungen und aktuellen Anpassungen widerspiegelt. Dies wird sich solange fortsetzen, bis eine ausreichend praktikable Schnittmenge zwischen allen Beteiligten besteht. Erst dann wird aus dem ewigen Entwurfsstatus auch eine verbindliche Version.

JSON vereinfacht zwar das Datenformat zur Kommunikation, andererseits geht es zu „lasch“ mit beispielsweise den Zeilenende- und Paragraphentrennzeichen um. Auf der anderen Seite kennt JSON auch JavaScript-Datentypen wie Date, Error, Function, Set oder undefined nicht, was zu Problemen im Datenaustausch führen kann. Daher ist in vielen Fällen eine Konversion der Werte nötig. JSON weist numerischen Werten Defizite auf. Probleme bereitet die verlässlich Definition von Ganzzahl, Dezimalzahl oder Zahlen in wissenschaftlicher Notation. Entsprechende Routinen in den gängigen Programmiersprachen lösen diese Defizite gezielt auf und bilden die Daten korrekt ab.

Fazit

JSON als konsequente Weiterentwicklung von XML und angelehnt an JavaScript und YAML zeigt deutlich, dass auch komplexe Aufgaben wie die Daten-Serialisierung und Objektdeklarationen sehr schlank und einfach gehalten werden können. Ein großer Vorteil ist zudem die menschenlesbare Form der verwendeten Daten, die den Umgang auch mit komplexen Datenstrukturen erheblich vereinfachen. Die simplen Strukturen von JSON bieten zudem eine extrem gute Performance, was vor allem im Einsatz von APIs und permanent überlasteten Netzbandbreiten einen großen Vorteil darstellt.

Nach oben