0%

JSON und CSV · Übung

Das JSON-Dokument schreiben

Der Konverter enthält jetzt gewöhnliche Python-Werte mit der richtigen Bedeutung. Das Modul json soll sie serialisieren: das Objekt im Speicher in JSON-Text mit den erforderlichen Maskierungen und Satzzeichen umwandeln.

Zuerst die äußere Struktur aufbauen

Die Artikelliste gehört unter das genaue Schema der obersten Ebene:

document = {
    "schema_version": 1,
    "items": items,
}

Dieses Python-Dictionary ist die logische Struktur des Dokuments. Die Serialisierung ist ein eigener Vorgang. Baue JSON nicht mit f-Strings oder str(document) zusammen: Python schreibt boolesche Werte als True und False, während JSON true und false verlangt. Anführungszeichen und Maskierung haben mehr Sonderfälle, als ein einzelnes Beispiel zeigt.

dump schreibt in eine Datei

json.dump(value, handle, ...) serialisiert direkt in eine geöffnete Textdatei:

with open(path, "w", encoding="utf-8") as handle:
    json.dump(document, handle, ensure_ascii=False, indent=2, allow_nan=False)
    handle.write("\n")
  • ensure_ascii=False hält Café in der UTF-8-Datei lesbar.

  • indent=2 erzeugt eine deterministische, gut prüfbare Ausgabe.

  • allow_nan=False lehnt nicht endliche Zahlen ab, die der JSON-Standard nicht enthält.

  • json.dump fügt keinen abschließenden Zeilenumbruch hinzu; deshalb ergänzt ihn der Dateivertrag.

Das s bezeichnet die String-Variante: json.dumps(document) gibt JSON-Text als Python-String zurück, während json.dump(document, handle) in eine geöffnete Datei schreibt. Beide serialisieren einen Wert. Dasselbe Paar funktioniert umgekehrt: load liest eine geöffnete Datei, und loads liest einen String ein. Lektion 5 verwendet dieses Lesepaar.

Jetzt bist du dran

Implementiere write_catalog_json(items, path) und convert_catalog(input_path, output_path).

write_catalog_json baut die genaue äußere Struktur auf, schreibt sie mit den oben genannten Optionen und gibt das geschriebene Dokument zurück. convert_catalog liest und konvertiert die CSV-Datei über read_catalog_csv, übergibt diese Artikel an die Schreibfunktion und gibt dasselbe Dokument zurück.

Führe das Projekt nach dem Implementieren der beiden Funktionen nur dann aus, wenn du sie vorübergehend auch selbst aufrufst; main tut bis Lektion 6 noch nichts. Die Prüfungen rufen die Funktionen direkt auf und untersuchen die tatsächliche Ausgabedatei. Sie verwenden auch eine unbekannte CSV-Datei, sodass eine fest eingebaute Kopie des bereitgestellten JSONs nicht bestehen kann.

Warum solltest du den JSON-Text nicht mit einem f-String aufbauen?

Was ist der Unterschied zwischen json.dump und json.dumps?

Aufgabe

Implementiere write_catalog_json(items, path) und convert_catalog(input_path, output_path).

Schreibe genau das Dokument {schema_version, items} mit json.dump, UTF-8, ensure_ascii=False, einer Einrückung von zwei Leerzeichen, allow_nan=False und einem abschließenden Zeilenumbruch. Gib aus beiden Funktionen dasselbe Dokument zurück.