JSON (JavaScript Object Notation) ist das Standardformat für den Austausch von Daten im Web. Es sieht aus wie JavaScript-Objekte, ist aber strenger: Schlüssel stehen in doppelten Anführungszeichen, es gibt keine Kommentare und keine Funktionen.
{
"name": "Mia",
"alter": 17,
"hobbys": ["Lesen", "Rad"],
"aktiv": true,
"partner": null
}Erlaubte Typen: Objekt, Array, Text, Zahl, true/false, null. Nicht erlaubt: undefined, Funktionen, Datumsobjekte (sie werden zu Text), NaN, Infinity.
JSON.stringify: Objekt → Text
Ergebnis
{"name":"Mia","alter":17,"hobbys":["Lesen","Rad"],"aktiv":true,"partner":null}
string
{
"name": "Mia",
"alter": 17,
"hobbys": [
"Lesen",
"Rad"
],
"aktiv": true,
"partner": null
}
[1,"a",null,null,null]
{"c":1}JSON.parse: Text → Objekt
Ergebnis
Heft 3.5 SyntaxError
Packe JSON.parse immer in try/catch, wenn der Text von außen kommt.
Auswählen und Umwandeln
stringify akzeptiert eine Liste der gewünschten Schlüssel oder eine Funktion; parse einen "Reviver":
Ergebnis
{"name":"Mia"}
{"name":"Mia","geburt":"2008-05-01T00:00:00.000Z"}
2008toJSON
Ein Objekt kann mit toJSON() selbst bestimmen, wie es serialisiert wird:
Ergebnis
{"p":[3,4]}Tiefe Kopie (einfach)
Ergebnis
1 2
Das funktioniert nur für reine JSON-Daten. Besser ist structuredClone(), das auch Datum, Map und Set kann.
JSON im Alltag
- Antworten von Web-APIs (
await response.json()) - Konfigurationsdateien wie
package.json - Speichern in
localStorage(nur Text möglich) - Austausch zwischen Programmen und Sprachen
Merke
JSON.stringifymacht aus Daten Text,JSON.parseaus Text Daten- Funktionen und
undefinedgehen verloren, Datum wird zu Text parsebei fremden Daten intry/catchsetzen- Mit
null, 2formatierst du lesbar structuredCloneist die bessere Tiefenkopie
Aufgabe
Wandle ein Objekt mit einer Liste von drei Büchern in JSON-Text um, parse den Text zurück und gib die Titel aus.