Daten aus JSON, XML und CSV sicher importieren

Du wählst ein passendes Austauschformat, prüfst eingehende Daten und überführst sie in eine einheitliche Struktur.

40 Min Lesezeit Stand:
Lernfelder: Lernfeld 8
Berufsbildpositionen: A8A10B1

Drei Exporte sollen in dieselbe Anwendung

Die Nordhafen Gebäudetechnik führt Wartungsdaten aus drei bestehenden Systemen zusammen. Ein Messgerät exportiert JSON, die Auftragsverwaltung liefert XML und ein externer Dienstleister schickt eine CSV-Datei. Jeder Datensatz soll am Ende dieselben Angaben enthalten:

  • die Gerätekennung als Text,
  • den Zeitpunkt als Text im vereinbarten ISO-Format,
  • die Temperatur als Zahl,
  • eine optionale Notiz als Text.

Der Import darf einen Datensatz nicht einfach übernehmen, nur weil sich die Datei öffnen lässt. Er muss prüfen, ob die Zeichen lesbar sind, die Syntax stimmt, alle benötigten Felder vorhanden sind und die Werte fachlich brauchbar sind. Erst danach werden die Daten in die gemeinsame Zielstruktur überführt.

Du brauchst dafür keine Vorkenntnisse in einer bestimmten Programmiersprache. Die kurzen JavaScript-Beispiele zeigen den Ablauf, nicht den Aufbau einer vollständigen Anwendung. Nach der Lektion kannst du Austauschdateien lesen, typische Fehler einordnen und eine Formatentscheidung aus Anforderungen ableiten.

Ein Format ordnet Werte nach Regeln

Ein Datenformat legt fest, wie Werte in einer Datei oder Nachricht dargestellt und voneinander getrennt werden. Ein Parser liest diese Darstellung und erzeugt daraus Werte, mit denen ein Programm arbeiten kann.

Die Form allein garantiert noch keine brauchbaren Daten. Der JSON-Text {"temperatureC": -800} kann syntaktisch korrekt sein, obwohl die Temperatur für das Wartungsszenario unplausibel ist. Darum trennen wir vier Prüfungen:

  1. Encoding: Lassen sich die gespeicherten Bytes als die vereinbarten Zeichen lesen?
  2. Syntax: Hält die Datei die Regeln ihres Formats ein?
  3. Struktur und Datentypen: Sind die erwarteten Felder vorhanden und haben sie die vereinbarte Form?
  4. Fachliche Gültigkeit: Passen Werte und Zusammenhänge zur betrieblichen Anforderung?

Diese Reihenfolge spart Umwege. Solange die Datei nicht zuverlässig dekodiert und geparst ist, kann die Anwendung ihre fachlichen Werte nicht sinnvoll prüfen.

Sortieraufgabe

Bringe die Importprüfungen in eine sinnvolle Reihenfolge

Ziehe die Einträge an die richtige Position. Geht auch per Tastatur über den Griff.

Die Reihenfolge stimmt.

Die Reihenfolge passt noch nicht.

Zuerst müssen aus Bytes die erwarteten Zeichen entstehen. Danach prüft der Parser die Syntax. Erst auf der geparsten Struktur lassen sich Felder, Datentypen und schließlich fachliche Regeln zuverlässig kontrollieren.

JSON bildet Objekte und Listen kompakt ab

Die JavaScript Object Notation (JSON) stellt Werte als Objekte, Listen und einfache Datentypen dar. Das Messgerät liefert eine Liste mit zwei Messungen:

{
  "measurements": [
    {
      "deviceId": "KLIMA-17",
      "capturedAt": "2026-07-10T08:15:00Z",
      "temperatureC": 22.4,
      "note": null
    },
    {
      "deviceId": "KLIMA-21",
      "capturedAt": "2026-07-10T08:20:00Z",
      "temperatureC": 24.1,
      "note": "Filter prüfen"
    }
  ]
}

Geschweifte Klammern begrenzen ein Objekt aus Schlüssel-Wert-Paaren. Eckige Klammern begrenzen eine Liste, die in JSON Array heißt. Schlüssel und Textwerte stehen in doppelten Anführungszeichen. Zahlen stehen ohne Anführungszeichen. null drückt aus, dass hier kein Wert vorliegt.

JSON kennt die einfachen Wertarten Zeichenkette, Zahl, Wahrheitswert und null. Dazu kommen Objekte und Arrays. Ein eigener Datumstyp gehört nicht dazu. capturedAt ist deshalb zunächst Text. Erst eine zusätzliche Vereinbarung macht daraus einen Zeitstempel im ISO-Format.

Ein häufiger Fehler entsteht, wenn ein Zahlenwert wie Text geschrieben wird:

{
  "deviceId": "KLIMA-17",
  "temperatureC": "22.4"
}

Dieses Dokument ist gültiges JSON. Für eine Anwendung, die mit temperatureC rechnen soll, ist der Datentyp trotzdem falsch. Der Parser prüft die Formatregeln, nicht automatisch den fachlich erwarteten Typ.

XML macht Hierarchie und Benennung ausdrücklich sichtbar

Die Auftragsverwaltung liefert dieselben Arten von Angaben als Extensible Markup Language (XML). Elemente werden durch öffnende und schließende Tags begrenzt:

<?xml version="1.0" encoding="UTF-8"?>
<measurements>
  <measurement>
    <deviceId>KLIMA-17</deviceId>
    <capturedAt>2026-07-10T08:15:00Z</capturedAt>
    <temperatureC>22.4</temperatureC>
    <note />
  </measurement>
</measurements>

XML bildet verschachtelte Strukturen deutlich ab. Im Vergleich zum JSON-Beispiel stehen Zahlen und Zeitangaben im Dokument zunächst als Zeicheninhalt. Ein XML-Schema kann zusätzliche Regeln für Elemente, Reihenfolge und Datentypen beschreiben. Ohne ein solches Schema muss die importierende Anwendung diese Vereinbarungen selbst prüfen.

Ein XML-Dokument ist wohlgeformt, wenn es die grundlegenden XML-Regeln einhält. Es hat zum Beispiel genau ein Wurzelelement, korrekt geschlossene Tags und eine saubere Verschachtelung. Gültig bedeutet zusätzlich, dass es zu einer festgelegten Dokumentbeschreibung wie einem XML-Schema oder einer Document Type Definition passt.

<measurement>
  <deviceId>KLIMA-17</deviceId>
  <temperatureC>22.4</measurement>
</temperatureC>

Dieses Beispiel ist nicht wohlgeformt. Die Elemente überschneiden sich. Geöffnet wurde zuerst measurement, dann temperatureC. Geschlossen werden müsste deshalb zuerst temperatureC und danach measurement.

CSV passt zu flachen Tabellen

Der Dienstleister liefert eine Comma-Separated-Values-Datei (CSV). Jede Zeile steht für einen Datensatz, die Felder werden durch ein vereinbartes Trennzeichen getrennt:

device_id;captured_at;temperature_c;note
KLIMA-17;2026-07-10T08:15:00Z;22.4;
KLIMA-21;2026-07-10T08:20:00Z;24.1;"Filter prüfen; Termin abstimmen"

Obwohl der Name ein Komma nennt, verwenden viele Exporte ein Semikolon. Das Format allein verrät das Trennzeichen nicht zuverlässig. Sender und Empfänger müssen es vereinbaren. Dasselbe gilt unter anderem für Spaltennamen, Dezimaltrennzeichen, Zeilenenden und Zeichenkodierung.

Die Anführungszeichen in der zweiten Datenzeile sind nötig, weil die Notiz selbst ein Semikolon enthält. Ohne die Anführungszeichen würde ein Parser daraus zwei Felder machen. Ein doppeltes Anführungszeichen innerhalb eines umschlossenen Feldes wird üblicherweise verdoppelt:

KLIMA-21;2026-07-10T08:20:00Z;24.1;"Hinweis: ""Filter prüfen"""

CSV trägt keine Datentypen. 22.4, true und 2026-07-10 kommen zunächst als Zeichenfolgen an. Der Import muss sie anhand der Spaltenvereinbarung umwandeln. Verschachtelte Listen oder Objekte lassen sich in CSV nur durch zusätzliche, oft schwer lesbare Regeln abbilden.

Zuordnungsaufgabe

Ordne die Anforderung dem passendsten Format zu

Wähle das Format, dessen Grundstruktur die Anforderung am direktesten trägt. In einem realen Projekt können weitere Kriterien die Entscheidung verändern.

Richtig zugeordnet. Prüfe diese Zuordnung noch einmal.

Richtig zugeordnet. Prüfe diese Zuordnung noch einmal.

Richtig zugeordnet. Prüfe diese Zuordnung noch einmal.

Richtig zugeordnet. Prüfe diese Zuordnung noch einmal.

von 4 richtig

CSV passt direkt zu flachen Zeilen und Spalten. JSON bildet Objekte, Listen und einfache Datentypen kompakt ab. XML macht benannte Hierarchien sichtbar und bietet etablierte Möglichkeiten zur Prüfung gegen eine Dokumentbeschreibung.

Die Anforderung entscheidet über das Format

Keines der drei Formate ist allgemein das beste. Eine begründete Auswahl verbindet konkrete Anforderungen mit Eigenschaften des Formats.

KriteriumJSONXMLCSV
Verschachtelte Datendirekt mit Objekten und Arraysdirekt mit Elementhierarchiennur mit Zusatzvereinbarungen
Einfache Datentypen im Dokumentjameist über Schema oder Importregelnein, Felder kommen als Text
Prüfung gegen formale Strukturzum Beispiel mit JSON Schemazum Beispiel mit XML Schema oder DTDSpaltenregeln im Importwerkzeug
Flache Tabellenmöglich, aber ausführlichermöglich, aber ausführlicherdirekter Anwendungsfall
Typische VereinbarungenFeldnamen, Pflichtfelder, DatentypenElemente, Attribute, Namensräume, SchemaTrennzeichen, Spalten, Maskierung, Encoding

Für die flache Liste des Dienstleisters kann CSV passend sein, wenn die beteiligten Systeme Trennzeichen und Spalten eindeutig vereinbaren. Für das Messgerät ist JSON geeignet, weil mehrere Messobjekte mit Zahlen und optionalen Werten kompakt übertragen werden. XML trägt den hierarchischen Export der Auftragsverwaltung und kann gegen eine festgelegte Dokumentstruktur geprüft werden.

Die Dateigröße allein reicht selten als Entscheidung. Komprimierung, vorhandene Bibliotheken, Wartbarkeit und die Fähigkeiten der Zielsysteme können wichtiger sein. Formuliere deshalb zuerst, was übertragen und geprüft werden soll. Danach lässt sich das Format begründen.

Schnellcheck

Triff Entscheidungen für den Import

Entscheide dich bei jeder Frage. Du bekommst die Erklärung direkt nach deiner Antwort.

Der Dienstleister ergänzt in einer Notiz ein Semikolon. Wie bleibt die CSV-Zeile bei vereinbartem Semikolon als Trennzeichen eindeutig?

Das passt.

Noch nicht ganz.

Ein Feld mit dem vereinbarten Trennzeichen wird umschlossen. Nur die Dateiendung zu ändern würde den Inhalt nicht in ein anderes Format überführen.

JSON.parse akzeptiert temperatureC mit dem Wert "22.4". Welche Prüfung fehlt noch?

Das passt.

Noch nicht ganz.

Der JSON-Parser bestätigt nur die Syntax. Ein Strukturvalidator oder die Importlogik muss zusätzlich den erwarteten Datentyp prüfen.

Ein XML-Dokument ist wohlgeformt, enthält aber kein benötigtes deviceId-Element. Welche Aussage trifft zu?

Das passt.

Noch nicht ganz.

Wohlgeformtheit beschreibt grundlegende XML-Regeln. Pflichtfelder gehören zu einer zusätzlichen Struktur- oder Fachregel.

Geschafft

von 3

Situationen richtig eingeordnet.

Encoding entscheidet, welche Zeichen ankommen

Eine Datei speichert Bytes. Eine Zeichenkodierung, oft kurz Encoding genannt, ordnet diese Bytes Zeichen zu. Sender und Empfänger müssen dieselbe Kodierung verwenden. UTF-8 kann die Zeichen aus den Beispielen darstellen und ist für den systemübergreifenden Austausch eine verbreitete Vereinbarung.

Wenn eine XML-Deklaration encoding="UTF-8" nennt, die Datei aber tatsächlich mit einer anderen Kodierung gespeichert wurde, widersprechen Angabe und Inhalt einander. Für JSON-Austausch außerhalb geschlossener Systemumgebungen fordert RFC 8259 UTF-8. Für CSV sollte die Kodierung ausdrücklich vereinbart werden, weil ältere Exporte weiterhin abweichende Annahmen verwenden können.

Zeichen wie ä, ß oder ° eignen sich für einen frühen Test. Aus Gerät wird bei einer falschen Dekodierung zum Beispiel ein beschädigter Text. Eine spätere Ersetzung einzelner Zeichen behebt die Ursache nicht zuverlässig. Der Import braucht die richtige Kodierung bereits beim Lesen der Bytes.

Aus drei Eingaben wird eine Zielstruktur

Eine Transformation ordnet Werte aus der Quellstruktur einer gemeinsamen Zielstruktur zu. Dazu brauchst du für jedes Format eine kleine Zuordnung:

ZielwertJSON-QuelleXML-QuelleCSV-Quelle
deviceIddeviceIdElement deviceIdSpalte device_id
capturedAtcapturedAtElement capturedAtSpalte captured_at
temperatureCtemperatureCText aus Element temperatureCText aus Spalte temperature_c
notenoteText aus Element noteSpalte note

Nach dem Parsen kann die CSV-Zeile beispielsweise als Objekt mit Textwerten vorliegen. Die Transformationsfunktion prüft die erwarteten Felder und wandelt die Temperatur um:

function transformCsvRow(row) {
  const rawTemperature = row.temperature_c?.trim()

  if (!row.device_id || !row.captured_at) {
    throw new Error("Gerätekennung oder Zeitpunkt fehlt")
  }

  if (rawTemperature === undefined || rawTemperature === "") {
    throw new Error("Temperatur fehlt")
  }

  const temperatureC = Number(rawTemperature)

  if (!Number.isFinite(temperatureC)) {
    throw new Error("Temperatur ist keine endliche Zahl")
  }

  if (temperatureC < -40 || temperatureC > 80) {
    throw new Error("Temperatur liegt außerhalb des Messbereichs")
  }

  return {
    deviceId: row.device_id,
    capturedAt: row.captured_at,
    temperatureC,
    note: row.note || null,
  }
}

Die Funktion setzt voraus, dass ein CSV-Parser die Zeile bereits anhand des vereinbarten Trennzeichens und der Maskierungsregeln gelesen hat. Die eigene Prüfung auf ein leeres Feld ist nötig, weil JavaScript leeren Text mit Number("") sonst in 0 umwandelt. Number.isFinite() verhindert anschließend Werte wie NaN und unendliche Zahlen. Der Temperaturbereich ist eine neue fachliche Regel des Szenarios, keine Eigenschaft von CSV.

Auch capturedAt braucht in einer vollständigen Importstrecke eine Prüfung gegen das vereinbarte Zeitformat. Diese Lektion lässt den Wert als Text stehen, damit der Unterschied zwischen Formatverarbeitung und umfassender Datumslogik sichtbar bleibt.

Fehlersuche

Finde die Stelle, die ungültige Temperaturen durchlässt

Die Funktion soll Text in eine Zahl umwandeln und nichtnumerische Werte ablehnen. Wähle die Zeile, deren Prüfung fachlich nicht trägt.

Fehler gefunden.

Diese Stelle ist nicht die Ursache.

NaN ist in JavaScript nicht mit === NaN erkennbar. Number.isFinite(temperatureC) prüft hier passend, ob nach der Umwandlung eine endliche Zahl vorliegt.

Entwickle einen Importplan für eine neue Quelle

Transferaufgabe

Plane den Import von Energiezählerdaten

Eine Gebäudeverwaltung erhält täglich eine Datei mit Zählerständen. Jeder Datensatz braucht meterId als Text, capturedAt als ISO-Zeitstempel und energyKwh als nicht negative Zahl. Die Quelle kann JSON, XML oder CSV liefern. Wähle ein Format, begründe deine Wahl anhand von zwei Anforderungen und skizziere die Prüf- und Transformationsschritte. Ergänze je einen gültigen und einen ungültigen Beispieldatensatz.

Musterlösung vergleichen

Musterlösung:

JSON ist passend, wenn die Quelle mehrere Zählerstände als Objekte liefert und der Zahlenwert bereits als JSON-Zahl übertragen werden soll. Vereinbart werden UTF-8, die Feldnamen, die Pflichtfelder und das Zeitformat.

{
  "meterId": "ENERGIE-04",
  "capturedAt": "2026-07-10T09:00:00Z",
  "energyKwh": 1842.7
}

Der Import dekodiert den Inhalt als UTF-8 und parst ihn als JSON. Danach prüft er, ob meterId und capturedAt nicht leere Zeichenketten sind und energyKwh eine endliche Zahl ist. Fachlich darf energyKwh nicht negativ sein. Anschließend übernimmt die Transformation die drei geprüften Werte in die Zielstruktur.

{
  "meterId": "ENERGIE-04",
  "capturedAt": "2026-07-10T09:00:00Z",
  "energyKwh": "unbekannt"
}

Das zweite Dokument ist syntaktisch korrektes JSON. Es verletzt aber die Datentypregel, weil energyKwh als Text statt als Zahl vorliegt. Eine ebenso tragfähige Lösung mit XML oder CSV braucht die zu diesem Format gehörenden Vereinbarungen und Prüfungen.

Das steckt auch in meiner Lösung:

Das nimmst du mit

JSON, XML und CSV lösen denselben Austauschbedarf auf unterschiedliche Weise. JSON bildet Objekte, Listen und einfache Datentypen kompakt ab. XML stellt benannte Hierarchien ausdrücklich dar und kann gegen eine Dokumentbeschreibung geprüft werden. CSV passt besonders zu flachen Tabellen, braucht aber klare Vereinbarungen zu Spalten, Trennzeichen, Maskierung und Encoding.

Ein erfolgreicher Parse ist nur der Anfang. Ein verlässlicher Import dekodiert die Bytes richtig, prüft die Syntax, kontrolliert Struktur und Datentypen und wendet danach fachliche Regeln an. Erst geprüfte Werte werden in die gemeinsame Zielstruktur transformiert.

Damit kannst du Daten aus vorhandenen Quellen zusammenführen. Wie eine API diese Daten transportiert und wie eine Anwendung ihre fachlichen Beziehungen modelliert, bleibt eine getrennte Entwurfsentscheidung.

Belegmatrix

LernzielOrdnungsmittelQuellenbasisLernaktivität
JSON, XML und CSV lesenLF8, A8, B1KMK-Rahmenlehrplan, Lernfeld 8; FIAusbV, Datenaustausch realisieren; RFC 8259, XML 1.0 und RFC 4180Drei Quelldateien lesen und Eigenschaften zuordnen
Format aus Anforderungen auswählenLF8, A8, B1FIAusbV, Datenaustausch realisieren; AP2-Prüfungskatalog 2026, DatenaustauschformateVergleichstabelle, Zuordnung und Entscheidungsquiz
Syntax-, Struktur-, Typ- und Encodingfehler unterscheidenLF8, A10, B1RFC 8259, XML 1.0 und RFC 4180; abstrahierte Aufgabenform der Beispielprüfung Winter 2022Prüfreihenfolge, fehlerhafte Beispiele, Quiz und Fehlersuche
Daten prüfen und transformierenLF8, A10, B1KMK-Rahmenlehrplan, Daten systemübergreifend bereitstellen; AP2-Prüfungskatalog 2026, heterogene QuellenZuordnungstabelle, JavaScript-Funktion und Transferaufgabe
Inhaltliche Grenze zu APIs und Datenmodellierung erklärenLF8, A10, B1FIAusbV und AP2-Prüfungskatalog 2026, Schnittstellen festlegenAbgrenzungs-Callout und Zusammenfassung

Durchgearbeitet?

Markiere die Lektion als erledigt, dein Fortschritt wird lokal gespeichert.