JSON vs. XML

JSON oder XML? Unser Javascript-Experte Alex Kereszturi erklärt die Unterschiede und die richtigen Einsatzgebiete des jeweiligen Formates.

AutorAlex Kereszturi
Datum14.08.2017
Lesezeit8 Minuten

Datenaustausch? Ja, aber nicht egal wie!

Darf man als Blogger klagen? Egal, ich tu es einfach! Heute möchte ich nämlich über mein Leid als Applikationsentwickler von datenbankgestützten Webapplikationen klagen. (Sie dürfen in den Kommentaren unten gerne etwas Mitleid und Verständnis posten.)

Immer wieder kommt bei Anwendungen, die Daten sammeln, nämlich das Thema Datenaustausch auf den Besprechungstisch. Natürlich müssen Daten ausgetauscht werden. Dass es aber nicht egal ist, wie die Daten ausgetauscht werden, soll dieser Blogbeitrag zeigen.

Hinweis: In einem meiner letzten Blogbeiträge habe ich ausführlich über XML & Co. geschrieben. Bevor Sie weiterlesen – oder spätestens, wenn Sie sich in diesem Beitrag vor lauter Fachbegriffen verlieren – sollten Sie ihn lesen. Er enthält viele Grundkonzepte, die hier aufgegriffen werden.

Die Aufgabe

Damit Sie sich in etwa vorstellen können, worin mein Leiden beim Datenaustausch besteht, skizziere ich Ihnen kurz die Aufgabenstellung.

Auf einem Datenbankserver – nennen wir ihn Debbie – liegen die Daten der Parkhäuser einer grossen Firma. Jeden Tag fahren rund 4000 Mitarbeitende ins Parkhaus und registrieren sich dabei mit ihrem Mitarbeiterausweis. Pro Ein- und Ausfahrt werden also etwa folgende Daten abgespeichert:

IdZeitParkhausPersonalnummer
106:11P510058975

 

Aufgabe ist es nun, diese Informationen mit den Mitarbeiterdaten zu verknüpfen, die ebenfalls auf Debbie liegen. Die entsprechenden Mitarbeiterdaten könnten in etwa wie folgt aussehen:

IdPersNrVornameNachnameKostenstelleGeschlecht
5510058975HansMuster68444M

 

Ziel ist es, eine Website mit einer netten Grafik anzuzeigen, die die Auslastung der Parkhäuser zeigt – aufgeteilt nach Kostenstelle und Geschlecht.

Lösungsansatz

Da ich diese Aufgabe gerne mit Chart.js (worüber ich ja auch schon einen Blogbeitrag verfasst habe) lösen möchte und Chart.js sehr gerne mit Daten im JSON-Format arbeitet, hätte ich die Daten von Debbie gerne im JSON-Format. Debbie läuft aber unter Microsoft SQL Server 2014 und kann – von Haus aus – die Daten nicht im JSON-Format anbieten. Als Alternative schlagen mir diverse Forumsbeiträge im Internet das XML-Format vor.

Und so bin ich mitten im Thema dieses Blogbeitrags: JSON oder XML?

Auslegeordnung

Was ist XML?

Laut Wikipedia ist XML «eine Auszeichnungssprache zur Darstellung hierarchisch strukturierter Daten in Form von Textdateien».

Dazu ein Beispiel mit den Parkdaten aus unserer Aufgabe:

<parkdaten>
  <zeit>06:11</zeit>
  <parkhaus>P5</parkhaus>
  <personalnummer>10058975</personalnummer>
</parkdaten>

Was ist JSON?

Zu JSON sagt Wikipedia: «JSON wird zur Übertragung und zum Speichern von strukturierten Daten eingesetzt». Und ich sage: JSON ist auch ASCII-Code, also Text.

Und auch hier ein Beispiel:

{
 zeit: "06:11",
 parkhaus: "P5",
 personalnummer: 10058975
}

Die Unterschiede im Detail

Wollen Sie wissen, was Sie da kriegen oder geht es bloss um die Daten an sich?

Im XML-Beispiel oben sehen wir aufgrund von <parkdaten>, dass es sich um Parkdaten handelt. Im JSON fehlt diese Angabe. Man spricht hier davon, dass XML im Gegensatz zu JSON deklarativ – wenn Sie jetzt googeln müssen, denken Sie an den Zöllner, der Sie fragt, ob Sie etwas zu deklarieren haben – ist, was soviel bedeutet, dass es offenlegt, was da an Daten geschickt wird.

Noch deutlicher wird das, wenn wir uns in Erinnerung rufen, dass XML von DTDs oder XSDs Unterstützung erhalten kann, die klar definieren, was für Datentypen etc. im XML daherkommen.

Für JSON gibt es da schon entsprechende Bemühungen (siehe http://json-schema.org/), die sich aber noch nicht wirklich etabliert haben.

Zusammengefasst: Ist die Schnittstelle klar definiert, kann ich getrost JSON verwenden, da ich dann ganz genau weiss, was für Daten da kommen. Weiss ich aber nicht genau, was für Daten kommen, bin ich froh um die Deklarationen von XML.

Darf es etwas einfacher und leichtgewichtiger sein?

In den Beispielen oben sieht man schon: JSON ist einfacher gehalten und «produziert» somit auch weniger Datenmenge. Nehmen wir beispielsweise die kompletten Parkhausdaten einer Einfahrt inklusive der verknüpften Mitarbeiterdaten im XML-Format …

<parkdaten>
  <zeit>06:11</zeit>
  <parkhaus>P5</parkhaus>
  <personalnummer>10058975</personalnummer>
  <vorname>Hans</vorname>
  <nachname>Muster</nachname>
  <kostenstelle>68444</kostenstelle>
  <geschlecht>M</geschlecht>
</parkdaten>

… und entfernen fairerweise alle unnötigen Leerzeichen und Zeilenumbrüche …

<parkdaten><zeit>06:11</zeit><parkhaus>P5</parkhaus><personalnummer>10058975</personalnummer><vorname>Hans</vorname><nachname>Muster</nachname><kostenstelle>68444</kostenstelle><geschlecht>M</geschlecht></parkdaten>

… ergibt das rund 215 Bytes an Daten. Multipliziert mit 4000 Mitarbeitern mal 21 Arbeitstagen pro Monat sind das rund 18 Megabyte Daten pro Monat.

Im JSON-Format sieht das so aus …

{zeit:"06:11",parkhaus:"P5",personalnummer:10058975,vorname:"Hans",nachname:"Muster",kostenstelle:68444,geschlecht:"M"}

… und liefert 121 Bytes pro Datensatz, was auf den Monat hochgerechnet gut 10 Megabyte gibt.

Zusammengefasst: Sind Datenübertragungsraten ein Thema, hat JSON ganz klar die Nase vorn.

Auszeichnung vs. Austausch

Die beiden Unterschiede oben zeigen es bereits, aber Wiederholung schadet nie:


JSON eignet sich hervorragend für den Datenaustausch. XML zeichnet die Daten semantisch aus und kann somit für viel mehr als «nur» für den Datenaustausch verwendet werden.


JavaScript, ahoi!

Und dann gibt es noch das Killer-Argument für alle, die mit JavaScript arbeiten. JSON steht ja für «JavaScript Object Notation» und kann in JavaScript direkt ausgewertet werden.

Zusammenfassung

Ich wollte ja mein Leid klagen. Das tue ich jetzt, da es wunderbar zusammenfasst, was in diesem Beitrag besprochen wurde.

Debbie (unser Datenbankserver) liefert mir pro Monatsauswertung über 150 Megabyte reine Text-Daten im XML-Format. Ich brauche diese für Chart.js aber im JSON-Format. Manchmal möchten die Verantwortlichen auch Auswertungen über mehrere Monate machen, was die Datenmenge verdoppelt, verdreifacht, …

Der leidvolle Weg:

Debbie liefert XML-Daten, die ich von einem kleinen Server-Script zippen und zwischenspeichern lasse, da die Datenmenge so viel geringer ist und sich die Daten im Nachhinein ja nicht mehr wirklich ändern sollten. Der Browser lädt sich nun die benötigten ZIP-Dateien herunter, entpackt diese, wandelt das XML in JSON um und übergibt die Daten an Chart.js. Welch ein Handstand! 🙂

Einfacher wäre:

Debbie liefert grad JSON.

Das Update von Debbie auf die 2016er-Version des MS SQL Server habe ich bereits beantragt.

Kurse zu XML, DTD, XSD & Co.

In unseren Kursen zu XML erlangen Sie Grundlagen sowie vertiefte Kenntnisse dieser Auszeichnungssprache. Mit Ihrem Wissen über XML als Basistechnologie sind Sie auch vorbereitet für zahlreiche auf XML aufbauende Technologien wie z.B. Webservices.

In unseren Kursen zu XML erlangen Sie Grundlagen sowie vertiefte Kenntnisse dieser Auszeichnungssprache. Mit Ihrem Wissen über XML als Basistechnologie sind Sie auch vorbereitet für zahlreiche auf XML aufbauende Technologien wie z.B. Webservices.

Über den Autor

Alex Kereszturi

Alex Kereszturi ist Web Solution Developer der ersten Stunden, Trike-Fahrer und Hobby-Psychologe. Als einer der ersten «Webpulisher SIZ» und als «Adobe Certified Instructor» entwickelt er seit seinem 15. Lebensjahr Lösungen für das WWW, Mobilgeräte und andere Lebenslagen. Er ist seit über 14 Jahren Kursleiter bei Digicomp, liebt das Sein in der Natur und setzt bei seinen Schulungen auf einen guten Mix aus Information, Praxisübungen und Unterhaltung. Als Inhaber und CEO führt er die Smilecom GmbH als ein kleines aber feines Software-Entwicklungs-Unternehmen und immer wieder ein turbulentes Familienleben mit drei Töchtern.