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=FalsehältCaféin der UTF-8-Datei lesbar.indent=2erzeugt eine deterministische, gut prüfbare Ausgabe.allow_nan=Falselehnt nicht endliche Zahlen ab, die der JSON-Standard nicht enthält.json.dumpfü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.