Aufgabe 18 - JSON-Werkstatt - Die Mediendatenbank
Aufgabe 18 - JSON-Werkstatt: Die Mediendatenbank
Abschnitt betitelt „Aufgabe 18 - JSON-Werkstatt: Die Mediendatenbank“Worum geht es?
Abschnitt betitelt „Worum geht es?“JSON ist das Austauschformat des Web und weit darüber hinaus: verschachtelt, selbstbeschreibend, überall lesbar. In dieser Übung arbeiten Sie mit einer echten verschachtelten Struktur, einer Mediendatenbank aus Projekten und deren Assets, und beherrschen den vollen Kreis: einlesen, durch die Verschachtelung navigieren, auswerten, umbauen und wieder als sauberes JSON schreiben (siehe Kapitel Dateien und Datenformate). Anders als eine flache CSV-Tabelle zwingt JSON dazu, mit Listen in Dictionaries in Listen sauber umzugehen; genau das ist die Kernkompetenz dieser Aufgabe.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel Dateien und Datenformate (das
json-Modul,load/dump,indent,ensure_ascii); Kapitel Exceptions (eigene Exception-Klassen). - Die Datei
library.json: ein Objekt mit dem Schlüsselprojects(Liste). Jedes Projekt hatid,title,ownerundassets(Liste); jedes Asset hatfilename,type(image,videooderaudio),size_mb,tagsund je nach Typ weitere Felder. 6 Projekte, 26 Assets, darunter drei absichtlich inkonsistente (eines ohnesize_mb, eines mit negativer Größe, eines mit unbekanntemtype). Korrekt geladen ergibt das23 assets loaded from 6 projects, 3 skipped.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie lesen und schreiben verschachteltes JSON mit dem Standardmodul, inklusive Encoding und lesbarer Formatierung.
- Sie navigieren sicher durch ineinander verschachtelte Dictionaries und Listen und fangen fehlende Schlüssel kontrolliert ab.
- Sie transformieren zwischen JSON-Strukturen (aggregieren, umgruppieren, zusammenführen) und weisen die Korrektheit der Ergebnisse nach.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: JSON laden, die Struktur beschreiben, Werte ausgeben (Teil A).
- Reorganisation und Transfer: durch die Verschachtelung navigieren, Auswertungen entwickeln, in neue Strukturen umbauen (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: eine Validierung entwerfen, defektes JSON abfangen, zwei Quellen zusammenführen und die Formatwahl begründen (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Sichtung
Abschnitt betitelt „Teil A - Sichtung“- Öffnen Sie
library.jsonzuerst im Editor. Beschreiben Sie die Struktur in zwei bis drei Sätzen: Welche Ebenen gibt es (Objekt → Liste → Objekt → Liste), und auf welcher Ebene stehen die eigentlichen Mediendateien? - Laden Sie die Datei mit
json.load(encoding="utf-8"). Welchen Python-Typ liefert die oberste Ebene, welchendata["projects"], welchen ein einzelnes Asset? Belegen Sie jede Antwort mittype(). - Geben Sie für jedes Projekt eine Zeile aus, Format
p01 Imagefilm der Schule: 5 assets. Die Asset-Zahl gewinnen Sie auslen(...)der jeweiligen Asset-Liste.
Teil B - Navigation und robustes Laden
Abschnitt betitelt „Teil B - Navigation und robustes Laden“- Schreiben Sie
load_assets(path): liefert eine flache Liste aller Assets über alle Projekte hinweg. Jedes Asset bekommt dabei zusätzlich seineproject_idund seinenowneraus der Ebene darüber mit (Rückgabe: Liste von Dictionaries). Das ist die typische Bewegung bei JSON: aus der Verschachtelung eine bearbeitbare, flache Sammlung gewinnen. - Definieren Sie
DataError(Exception)und validieren Sie beim Einsammeln: Ein Asset ist gültig, wennfilename,typeundsize_mbvorhanden sind,typein{"image", "video", "audio"}liegt undsize_mb > 0ist. Ungültige Assets werden übersprungen und mitproject_id,filenameund Grund in einer Fehlerliste gesammelt, nicht verschwiegen. Eine fehlende Datei führt zuDataErrormit verständlicher Meldung. - Ausgabe nach dem Laden:
23 assets loaded from 6 projects, 3 skippedplus die Details der übersprungenen Assets. Finden Sie alle drei präparierten Fehler?
Teil C - Auswerten, Umbauen, Schreiben
Abschnitt betitelt „Teil C - Auswerten, Umbauen, Schreiben“- Berechnen Sie: Gesamtgröße (
size_mb) je Projekt, Anzahl der Assets jetypeüber die gesamte Bibliothek, sowie das größte Asset der Bibliothek (filenameund Größe). - Bauen Sie die Struktur um: Erzeugen Sie ein Dictionary
by_type, das die gültigen Assets nachtypegruppiert (Schlüsselimage/video/audio, Wert je eine Liste derfilenames). Das ist eine typische JSON-Umgruppierung, von “nach Projekt geordnet” zu “nach Typ geordnet”. - Implementieren Sie
save_summary(path, ...): schreibt die gesamte Auswertung als verschachteltes JSON (indent=2,ensure_ascii=False); Struktur etwa: je Projekt Größe und Asset-Zahl, Zählung je Typ, größtes Asset, die Gruppierungby_type. - Schließen Sie den Kreis: Lesen Sie Ihr
summary.jsonwieder ein und prüfen Sie zwei Stichprobenwerte mitassertgegen die Originalberechnung.
Teil D - Expertenteil: Fremde Daten, mehrere Quellen
Abschnitt betitelt „Teil D - Expertenteil: Fremde Daten, mehrere Quellen“- Defektes JSON abfangen: Erzeugen Sie selbst eine syntaktisch kaputte Datei
broken.json(etwa ein fehlendes Komma oder eine offene Klammer). Sorgen Sie dafür, dassload_assetsbei einem Syntaxfehler nicht abstürzt, sondern einenDataErrormit verständlicher Meldung auslöst (Hinweis:json.JSONDecodeErrorrecherchieren). - Schärfen Sie das Schema:
tagsmuss eine Liste sein,size_mbeine Zahl (intoderfloat),filenamedarf nicht leer sein. Jede Verletzung landet mit präzisem Grund in der Fehlerliste. Testen Sie mit einem selbst hinzugefügten, absichtlich falschen Asset. - Zwei Quellen zusammenführen: Erzeugen Sie selbst ein zweites Archiv
library_extra.jsonmit ein bis zwei zusätzlichen Projekten. Schreiben Siemerge_libraries(a, b), das beide zu einer Bibliothek vereint; Projekte mit gleicheriddürfen nicht doppelt entstehen. Legen Sie fest, was in diesem Fall geschieht (überschreiben oder Assets zusammenführen), und begründen Sie die Wahl. Schreiben Sie das Ergebnis alslibrary_merged.json. - Beurteilen Sie in drei Sätzen: Wann ist JSON die bessere Wahl als CSV und wann umgekehrt? Nennen Sie je ein konkretes Merkmal dieser Mediendatenbank, das in einer einzelnen flachen CSV-Tabelle verloren ginge.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Welche Python-Typen entstehen beim Einlesen aus einem JSON-Objekt, einem JSON-Array, einem JSON-String und einer JSON-Zahl?
- Wozu dient
ensure_ascii=Falsebeim Schreiben, und was passiert ohne diese Option mit Zeichen wieäoderß? - Wie greifen Sie auf einen Schlüssel zu, der fehlen darf, ohne dass das Programm mit
KeyErrorabstürzt? - Warum lässt sich eine verschachtelte Struktur (Projekte mit ihren Assets) in JSON natürlich abbilden, in einer einzelnen CSV-Tabelle aber nicht?
- Worin unterscheiden sich
JSONDecodeErrorundKeyError, und an welcher Stelle des Ablaufs tritt jeder auf?
media.py (Laden mit Validierung, Auswertung, Umbau, Export und Merge), das erzeugte summary.json und library_merged.json, die selbst erzeugten Dateien broken.json und library_extra.json sowie ein kurzes Protokoll: Welche drei inkonsistenten Assets wurden gefunden und mit welcher Begründung? Committet im Git-Repository.