0%

JSON en CSV · oefening

Het JSON-document schrijven

De converter bevat nu gewone Python-waarden met de juiste betekenis. De taak van de module json is die te serialiseren: het object in het geheugen omzetten in JSON-tekst met de vereiste escapes en leestekens.

Bouw eerst het omhullende object

De itemlijst hoort onder het exacte schema op het hoogste niveau:

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

Die Python-dictionary is de logische vorm van het document. Serialiseren is een aparte bewerking. Bouw JSON niet op met f-strings of str(document): Python schrijft booleans als True en False, terwijl JSON true en false vereist; aanhalingstekens en escapes kennen meer gevallen dan één voorbeeld laat zien.

dump schrijft naar een bestand

json.dump(value, handle, ...) serialiseert rechtstreeks naar een geopend tekstbestand:

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 houdt Café leesbaar in het UTF-8-bestand.

  • indent=2 geeft deterministische uitvoer die je goed kunt nakijken.

  • allow_nan=False weigert niet-eindige getallen die de JSON-standaard niet kent.

  • json.dump voegt geen afsluitende newline toe, dus het bestandscontract voegt er een toe.

De s benoemt de stringversie: json.dumps(document) geeft JSON-tekst terug als Python-string, terwijl json.dump(document, handle) naar een geopend bestand schrijft. Beide serialiseren één waarde. Dezelfde combinatie werkt omgekeerd: load leest een geopend bestand en loads verwerkt een string. Les 5 gebruikt dat leespaar.

Nu jij

Implementeer write_catalog_json(items, path) en convert_catalog(input_path, output_path).

write_catalog_json bouwt het exacte omhullende object, schrijft het met de opties hierboven en geeft het geschreven document terug. convert_catalog leest en converteert de CSV via read_catalog_csv, geeft die items aan de schrijffunctie en geeft hetzelfde document terug.

Voer het project na het implementeren van de twee functies alleen uit als je ze ook zelf tijdelijk aanroept; main doet tot les 6 nog niets. De controles roepen de functies rechtstreeks aan en bekijken het werkelijke uitvoerbestand. Ze gebruiken ook een onbekende CSV, dus een vastgelegde kopie van de JSON voor de meegeleverde data komt niet door de beoordeling.

Waarom bouw je de JSON-tekst niet met een f-string?

Wat is het verschil tussen json.dump en json.dumps?

Opdracht

Implementeer write_catalog_json(items, path) en convert_catalog(input_path, output_path).

Schrijf het exacte document {schema_version, items} met json.dump, UTF-8, ensure_ascii=False, inspringing van twee spaties, allow_nan=False en één afsluitende newline. Geef uit beide functies hetzelfde document terug.