JSON-Daten parsen

PythonBeginner
Jetzt üben

Einführung

JSON (JavaScript Object Notation) ist ein leichtgewichtiges Datenaustauschformat, das häufig für Konfigurationsdateien und die Kommunikation mit APIs verwendet wird.

Shell-Werkzeuge können einfachen Text gut verarbeiten. Strukturierte Formate wie JSON lassen sich jedoch meist einfacher und sicherer mit den integrierten Bibliotheken von Python bearbeiten.

In diesem Lab übernehmen Sie die Rolle eines Entwicklers, der die Konfiguration einer Anwendung aktualisieren muss. Sie erstellen eine JSON-Konfigurationsdatei, schreiben ein Python-Skript zum Einlesen der Datei, ändern eine Einstellung und speichern die Änderungen in einer neuen Datei.

Beispieldaten erstellen

In diesem Schritt erstellen Sie eine JSON-Konfigurationsdatei mit Beispieldaten. Die Datei simuliert eine typische Einstellungsdatei für eine Softwareanwendung. Sie enthält Schlüssel für den Anwendungsnamen, die Version, den Debug-Modus und die maximal zulässige Anzahl von Verbindungen.

Stellen Sie zunächst sicher, dass Sie sich im richtigen Arbeitsverzeichnis befinden:

JSON gehört zu den am häufigsten verwendeten strukturierten Datenformaten im modernen Betrieb. APIs, Cloud-Werkzeuge und viele Konfigurationssysteme verwenden dieses Format. Es ist daher deutlich wertvoller, zu lernen, wie Sie JSON sicher lesen und ändern, als es wie einfachen Text zu behandeln.

cd ~/project

Erstellen Sie nun mit einem Texteditor wie nano eine Datei mit dem Namen config.json.

nano config.json

Fügen Sie den folgenden Inhalt in die Datei ein. Dieses JSON-Objekt enthält einen booleschen Wert (false), eine Ganzzahl (100) und Zeichenketten.

{
  "appName": "SuperApp",
  "version": "1.0.0",
  "debug": false,
  "maxConnections": 100
}

So speichern Sie die Datei und beenden nano:

Drücken Sie zum Speichern und Beenden von nano Ctrl + O, um die Änderungen zu schreiben. Bestätigen Sie anschließend den Dateinamen mit Enter. Drücken Sie danach Ctrl + X, um den Editor zu beenden.

Überprüfen Sie den Dateiinhalt mit dem Befehl cat:

cat config.json

Der JSON-Inhalt sollte im Terminal ausgegeben werden.

JSON lesen

In diesem Schritt schreiben Sie ein Python-Skript, das die Datei config.json liest. Pythons json-Modul wandelt JSON-Daten in ein Python-Dictionary um.

Hier zeigt Python einen deutlichen Vorteil gegenüber einfachen Shell-Skripten. Statt Text mit regulären Ausdrücken zu durchsuchen und darauf zu hoffen, dass die Struktur einfach bleibt, kann Python die Datei nach den JSON-Regeln parsen und Ihnen echte Datentypen zur Verarbeitung bereitstellen.

Stellen Sie sich json.load() als das „Auspacken“ eines Versandkartons vor. Die Funktion nimmt den in der Datei gespeicherten Text – den Karton – und wandelt ihn in ein Python-Dictionary – den Inhalt – um. Dieses Dictionary können Sie in Ihrem Code einfach verwenden und ändern.

Erstellen Sie ein neues Python-Skript mit dem Namen parse_json.py:

nano parse_json.py

Fügen Sie den folgenden Code in die Datei ein. Das Skript importiert das json-Modul, öffnet die Konfigurationsdatei und lädt die Daten.

import json

## Open the JSON file
with open('config.json', 'r') as file:
    ## Load the data into a Python dictionary
    data = json.load(file)

## Print the data to verify it was loaded correctly
print("Current Configuration:")
print(data)
print(f"Type of data: {type(data)}")

Speichern und beenden Sie nano (Ctrl+O, Enter, Ctrl+X).

Führen Sie das Skript nun aus, um die Ausgabe anzuzeigen:

python3 parse_json.py

Das Dictionary sollte in der Konsole ausgegeben werden. Dies bestätigt, dass Python die JSON-Datei erfolgreich geparst hat.

Daten ändern

In diesem Schritt ändern Sie die geladenen Daten in Ihrem Python-Skript. Da json.load() die Daten in ein gewöhnliches Python-Dictionary umwandelt, können Sie die Werte wie in jedem anderen Dictionary ändern.

Beachten Sie dabei die Umwandlung der Datentypen. JSON-Werte wie true und false werden zu Python-Werten wie True und False. Zahlen bleiben numerische Werte und werden nicht in einfache Zeichenketten umgewandelt. Dadurch werden spätere Vergleiche und Berechnungen deutlich sicherer.

Öffnen Sie parse_json.py erneut, um die Datei zu bearbeiten:

nano parse_json.py

Ändern Sie das Skript so, dass der Wert des Schlüssels debug von False – dem Python-Gegenstück zu false in JSON – in True geändert wird. Fügen Sie die Änderungslogik nach dem Laden der Daten und vor deren Ausgabe ein.

Ändern Sie Ihren Code so, dass er wie folgt aussieht:

import json

with open('config.json', 'r') as file:
    data = json.load(file)

print("Original Debug Status:", data['debug'])

## Modify the value
data['debug'] = True

print("Updated Debug Status:", data['debug'])

Speichern und beenden Sie nano.

Führen Sie das Skript erneut aus, um die Änderung im Speicher zu überprüfen:

python3 parse_json.py

Die Ausgabe sollte den ursprünglichen Status als False und den aktualisierten Status als True anzeigen. Beachten Sie, dass diese Änderung derzeit nur im Speicher des Python-Programms vorhanden und noch nicht in einer Datei gespeichert ist.

Änderungen speichern

In diesem Schritt speichern Sie das geänderte Dictionary in einer neuen JSON-Datei. Dazu verwenden Sie die Funktion json.dump().

Dieser Ablauf aus Lesen, Ändern und Schreiben ist ein sehr häufiges Automatisierungsmuster. Das Skript lädt strukturierte Daten, ändert nur die vorgesehenen Felder und schreibt wieder gültiges JSON. Das ist wesentlich zuverlässiger als eine zeilenbasierte Bearbeitung, wenn die Dateistruktur komplexer wird.

Stellen Sie sich json.dump() als das „Packen“ des Kartons vor. Die Funktion nimmt Ihr Python-Dictionary – die einzelnen Gegenstände – und wandelt es wieder in ein Textformat – den verschlossenen Karton – um, damit es in einer Datei gespeichert werden kann. Es ist sinnvoll, die Daten in einer neuen Datei wie new_config.json zu speichern. So vermeiden Sie beim Testen, die ursprüngliche Konfiguration zu überschreiben.

Öffnen Sie parse_json.py ein letztes Mal:

nano parse_json.py

Fügen Sie den Code hinzu, der das Dictionary data in eine Datei mit dem Namen new_config.json schreibt. Mit dem Parameter indent=4 wird die Ausgabedatei für Menschen lesbar formatiert (Pretty-Printing).

Ihr vollständiges Skript sollte wie folgt aussehen:

import json

## 1. Read the original file
with open('config.json', 'r') as file:
    data = json.load(file)

## 2. Modify the data
data['debug'] = True

## 3. Write to a new file
with open('new_config.json', 'w') as file:
    json.dump(data, file, indent=4)

print("Configuration updated and saved to new_config.json")

Speichern und beenden Sie nano.

Führen Sie das Skript aus, um den Ablauf aus Lesen, Ändern und Schreiben auszuführen:

python3 parse_json.py

Bei erfolgreicher Ausführung gibt das Skript die Bestätigungsmeldung aus.

Ergebnis überprüfen

In diesem Schritt überprüfen Sie, ob die neue Konfigurationsdatei erstellt wurde und den aktualisierten Wert enthält.

Bei strukturierten Dateien ist die Überprüfung besonders wichtig. Ein Skript kann syntaktisch erfolgreich ausgeführt werden und trotzdem logisch falsche Inhalte erzeugen. Wenn Sie die Ausgabedatei erneut einlesen, bestätigen Sie sowohl die Erstellung der Datei als auch die Richtigkeit der Datenänderung.

Listen Sie die Dateien in Ihrem Verzeichnis auf, um zu bestätigen, dass new_config.json vorhanden ist:

ls -l

Geben Sie nun den Inhalt der neuen Datei aus:

cat new_config.json

Die Ausgabe sollte ungefähr so aussehen:

{
  "appName": "SuperApp",
  "version": "1.0.0",
  "debug": true,
  "maxConnections": 100
}

Beachten Sie, dass "debug" nun den Wert true hat.

Sie können die ursprüngliche und die neue Datei auch mit dem Befehl diff vergleichen. So sehen Sie genau, was sich geändert hat:

diff config.json new_config.json

Die Ausgabe hebt den Unterschied zwischen den Zeilen mit debug hervor.

Zusammenfassung

In diesem Lab haben Sie erfolgreich gelernt, wie Sie JSON-Daten mit Python verarbeiten. Zunächst haben Sie eine JSON-Konfigurationsdatei erstellt. Anschließend haben Sie ein Python-Skript geschrieben, das diese Datei in ein Dictionary parst. Danach haben Sie die Daten programmgesteuert geändert und die aktualisierte Struktur in einer neuen JSON-Datei gespeichert.

Dieser Ablauf – Lesen, Ändern, Schreiben – ist ein grundlegendes Muster in der Automatisierung und bei DevOps-Skripten. Bash eignet sich hervorragend zum Ausführen von Befehlen. Pythons Fähigkeit, strukturierte Daten wie JSON zu verarbeiten, macht Python jedoch zu einem leistungsfähigen Werkzeug für die Verwaltung komplexer Konfigurationen und API-Daten.