JSON und Python: Grundlagen, Beispiele und Best Practices für Entwickler

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

  1. Leichtgewichtig und effizient: Als Textformat benötigt JSON weniger Datenvolumen und reduziert dadurch die Netzwerklast.
  2. Hohe Kompatibilität: JSON wird von nahezu allen Programmiersprachen unterstützt und kann plattformübergreifend eingesetzt werden.
  3. 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)