1. Was ist JSON? (Grundlagen)
Überblick über JSON
JSON (JavaScript Object Notation) ist ein Datenformat, das häufig für die Kommunikation zwischen Client und Server verwendet wird. Es ist leichtgewichtig, gut lesbar und hat eine einfache Struktur, weshalb es in Web- und Mobile-Anwendungen weit verbreitet ist. Da JSON ein Textformat ist und in nahezu jeder Sprache einfach verarbeitet werden kann, ist es äußerst vielseitig.
Grundstruktur von JSON
JSON stellt Daten in Schlüssel-Wert-Paaren dar. Zum Beispiel sieht eine JSON-Struktur so aus:
{
"Name": "Sato",
"Alter": 30,
"Hobbys": ["Lesen", "Filme"]
}
In diesem Beispiel ist Name
ein String, Alter
eine Zahl und Hobbys
ein Array. Da die Struktur einfach und gut lesbar ist, ist der Datenaustausch sehr effizient.
Vorteile von JSON
- Leichtgewichtig und effizient: Als Textformat benötigt JSON weniger Datenvolumen und reduziert dadurch die Netzwerklast.
- Hohe Kompatibilität: JSON wird von nahezu allen Programmiersprachen unterstützt und kann plattformübergreifend eingesetzt werden.
- Einfache Verarbeitung: JSON-Daten lassen sich leicht lesen und schreiben, besonders in der API-Kommunikation.
2. JSON in Python verwenden (Grundlagen)
Das json
-Modul in Python
In Python kann man mit dem json
-Modul JSON-Daten einfach lesen und schreiben. Um beispielsweise JSON-Daten in ein Python-Dictionary umzuwandeln, verwendet man die Funktion json.loads()
.
import json
json_data = '{"Name": "Sato", "Alter": 30}'
python_obj = json.loads(json_data)
print(python_obj) # {'Name': 'Sato', 'Alter': 30}
Umgekehrt kann man Python-Objekte mit json.dumps()
ins JSON-Format umwandeln.
python_obj = {"Name": "Sato", "Alter": 30}
json_data = json.dumps(python_obj, ensure_ascii=False)
print(json_data) # {"Name": "Sato", "Alter": 30}
Dateien lesen und schreiben
Man kann JSON-Daten auch aus Dateien einlesen oder in Dateien schreiben.
# Datei lesen
with open('data.json', 'r') as f:
data = json.load(f)
# Datei schreiben
with open('data.json', 'w') as f:
json.dump(python_obj, f, ensure_ascii=False)
3. JSON-Kommunikation in Python (Praxis)
API-Kommunikation mit dem requests-Modul
Mit dem requests
-Modul lassen sich JSON-Daten einfach über APIs senden und empfangen. Hier ein Beispiel, wie man per POST-Request JSON-Daten sendet und eine Antwort erhält:
JSON per POST-Request senden
import requests
url = 'https://example.com/api'
data = {'Name': 'Sato', 'Alter': 30}
response = requests.post(url, json=data)
json_response = response.json()
print(json_response)
JSON per GET-Request empfangen
Mit einem GET-Request lassen sich JSON-Daten ebenfalls leicht abrufen.
response = requests.get('https://example.com/api/user/1')
data = response.json()
print(data)

4. Fehlerbehandlung und Best Practices
Fehlerbehandlung bei API-Kommunikation
Bei API-Kommunikation können Fehler auftreten, daher ist ein korrektes Error-Handling wichtig. Das folgende Beispiel fängt Netzwerkfehler und Timeouts ab:
try:
response = requests.post(url, json=data)
response.raise_for_status()
except requests.exceptions.HTTPError as errh:
print("HTTP-Fehler:", errh)
except requests.exceptions.ConnectionError as errc:
print("Verbindungsfehler:", errc)
except requests.exceptions.Timeout as errt:
print("Timeout-Fehler:", errt)
except requests.exceptions.RequestException as err:
print("Oops: Ein anderer Fehler", err)
Retry-Mechanismus
Wenn das Netzwerk instabil ist, empfiehlt sich ein Retry-Mechanismus. Mit dem Retry
-Klassenobjekt lässt sich dies leicht umsetzen:
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
response = session.get(url)
5. JSON-Validierung
Validierung mit jsonschema
Um sicherzustellen, dass empfangene JSON-Daten das erwartete Format haben, kann die Bibliothek jsonschema
genutzt werden.
from jsonschema import validate, ValidationError
schema = {
"type": "object",
"properties": {
"Name": {"type": "string"},
"Alter": {"type": "number"}
},
"required": ["Name", "Alter"]
}
json_data = {"Name": "Sato", "Alter": 30}
try:
validate(instance=json_data, schema=schema)
print("JSON ist gültig")
except ValidationError as e:
print("Validierungsfehler:", e)
Auch komplexe Schemata und verschachtelte Objekte können überprüft werden, sodass eine zuverlässige API-Datenprüfung möglich ist.
6. Sicherheits-Best Practices
Umgang mit API-Schlüsseln
API-Schlüssel sollten nicht direkt im Quellcode gespeichert, sondern über Umgebungsvariablen verwaltet werden, um Sicherheitsrisiken zu minimieren.
import os
api_key = os.getenv('API_KEY')
Daten-Sanitizing
Bevor Benutzereingaben an den Server gesendet werden, sollten sie entsprechend sanitisiert werden, um SQL-Injection oder Cross-Site-Scripting (XSS) zu verhindern.
from html import escape
safe_data = escape(user_input)