Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

JSON lesen, schreiben und prüfen

Nach dieser Lektion: Ich kann JSON lesen, schreiben und feldweise auf richtige Typen prüfen.

Lektion, 55 Min.5 BefehlePostgreSQL-und-PostgREST-Lab: eine Datenbank und eine REST-API im Browser

Was ist JSON und wie prüft man es?

JSON (JavaScript Object Notation) ist ein Textformat, in dem Web-APIs Daten austauschen: Zahlen, Text, Listen und Objekte in einer festen Schreibweise. Wer JSON lesen und prüfen kann, erkennt falsche Daten, bevor sie in einer Datenbank landen.

Ein Buch der Hochschulbibliothek ist ein JSON-Objekt. Die App schickt es an die API, und die API muss entscheiden, ob es stimmt.

Am Ende dieser Lektion

Notiz

Ich kann JSON lesen, schreiben und feldweise auf richtige Typen prüfen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Objekteine Gruppe von Feldern in geschweiften Klammern{"jahr": 2021}
Arrayeine Liste von Werten in eckigen Klammern[1, 2, 3]
Schlüsselder Name eines Feldes, immer in doppelten Anführungszeichen"titel"
Datentypdie Art eines Wertes: Text, Zahl, wahr oder falsch, null
nullder Wert, der sagt: hier ist nichts
Validierungdas Prüfen, ob Daten die Regeln erfüllen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

JSON kennt nur sechs Arten von Werten

Ein Objekt ist eine Gruppe von Feldern in {}. Ein Array ist eine Liste in []. Dazu kommen Text in doppelten Anführungszeichen, eine Zahl, true oder false und null.

Jedes Feld hat einen Schlüssel in Anführungszeichen, einen Doppelpunkt und einen Wert. Felder trennt ein Komma, aber nach dem letzten steht keines.

Ein Beispiel: ein Buch als JSON-Objekt

Code: bash
{
  "titel": "Netze verstehen",
  "fach": "Informatik",
  "jahr": 2021,
  "exemplare": 2,
  "verfuegbar": true,
  "schlagworte": ["Netzwerk", "Protokolle"],
  "rezension": null
}

JSON in Python einlesen

Code: python
import json

# Der Text kommt so von einer API. Python macht daraus ein Dictionary.
text = '{"titel": "Netze verstehen", "jahr": 2021, "exemplare": 2, "verfuegbar": true}'
buch = json.loads(text)
print(buch["titel"])
print(type(buch["jahr"]))
print(buch["verfuegbar"])
# Ändern Sie "jahr": 2021 in "jahr": "2021" und starten Sie noch einmal.

Die API liefert und frisst JSON

Im Lab schreibt die API jede Zeile als JSON-Objekt. Fragen Sie nach einer Liste, kommt ein Array von Objekten zurück. Mit einem besonderen Accept-Header bekommen Sie ein einzelnes Objekt.

Schicken Sie danach absichtlich falsche Daten. Die Datenbank prüft die Typen und lehnt ab.

psql das Passwort geben

Befehl
export PGPASSWORD=shop

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Tabelle buecher anlegen und füllen

Befehl
psql -h db -U shop -c "drop table if exists buecher cascade; create table buecher (id serial primary key, titel text not null, fach text not null, jahr int not null, exemplare int not null default 1); insert into buecher (titel, fach, jahr, exemplare) values ('Algorithmen kompakt', 'Informatik', 2019, 3), ('Netze verstehen', 'Informatik', 2021, 2), ('Statistik fuer alle', 'Mathematik', 2018, 1), ('Schreiben im Studium', 'Sprache', 2020, 4); notify pgrst, 'reload schema'"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein einzelnes Objekt statt einer Liste

Befehl
curl -s -w "\n" -H "Accept: application/vnd.pgrst.object+json" "http://api:3000/buecher?id=eq.2"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Jahr als Text senden

Befehl
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"titel":"Falsch","fach":"Test","jahr":"neunzehn"}' "http://api:3000/buecher"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Kaputtes JSON senden

Befehl
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"titel":' "http://api:3000/buecher"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Prüfen heißt: jedes Feld gegen eine Regel halten

Eine API sollte Daten prüfen, bevor sie sie weitergibt. Gehen Sie Feld für Feld vor. Fehlt es? Hat es den richtigen Typ? Liegt der Wert im erlaubten Bereich?

Sammeln Sie alle Fehler in einer Liste, statt beim ersten aufzuhören. So erfahren Nutzende mit einer Antwort, was alles zu ändern ist.

Ein Beispiel: die Regeln für ein Buch

FeldTypRegel
titelTextNicht leer
fachTextNicht leer
jahrGanze ZahlZwischen 1450 und 2100
exemplareGanze Zahl0 oder mehr
verfuegbarWahr oder falschNur true oder false

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Den Typ prüfen, nicht nur den Wert

Code: python
wert = True
# In Python zählt True auch als ganze Zahl. Das ist eine Falle.
print(isinstance(wert, int))
print(type(wert) == int)
print(type(2021) == int)
print(type("2021") == int)

Ein häufiger Fehler

Warnung

Viele glauben, 2021 und "2021" seien dasselbe, weil sie gleich aussehen. Das eine ist eine Zahl, das andere ein Text. Prüfen Sie den Typ eines Feldes und nicht nur sein Aussehen, sonst rechnet eine App später mit Text.

Über dieses Lab und seinen Quellcode: PostgreSQL-und-PostgREST-Lab: eine Datenbank und eine REST-API im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.