Kurz: JSON (JavaScript Object Notation) ist das Standardformat für den Austausch von Daten im Web. Es sieht aus wie JavaScript-Objekte, ist aber strenger.
Teil des Kurses JavaScript
Kapitel 18 von 40 im Kurs JavaScript. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.
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
const daten = { name: "Mia", alter: 17, hobbys: ["Lesen", "Rad"], aktiv: true, partner: null };
const text = JSON.stringify(daten);
console.log(text);
console.log(typeof text);
console.log(JSON.stringify(daten, null, 2)); // schön eingerückt
console.log(JSON.stringify([1, "a", undefined, () => 1, NaN]));
console.log(JSON.stringify({ a: undefined, b: () => 1, c: 1 }));Ausgabe:
{"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
const text = '{"produkte":[{"name":"Stift","preis":1.5},{"name":"Heft","preis":2}]}';
const daten = JSON.parse(text);
console.log(daten.produkte[1].name);
console.log(daten.produkte.reduce((s, p) => s + p.preis, 0));
try {
JSON.parse("{name: 'Mia'}"); // ungültig: Schlüssel ohne Anführungszeichen
} catch (e) {
console.log(e.name);
}Ausgabe:
Heft
3.5
SyntaxErrorPacke 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”:
const nutzer = { name: "Mia", passwort: "geheim", geburt: new Date(Date.UTC(2008, 4, 1)) };
console.log(JSON.stringify(nutzer, ["name"]));
console.log(JSON.stringify(nutzer, (k, v) => (k === "passwort" ? undefined : v)));
const roh = JSON.stringify(nutzer);
const zurueck = JSON.parse(roh, (k, v) => (k === "geburt" ? new Date(v) : v));
console.log(zurueck.geburt.getUTCFullYear());Ausgabe:
{"name":"Mia"}
{"name":"Mia","geburt":"2008-05-01T00:00:00.000Z"}
2008toJSON
Ein Objekt kann mit toJSON() selbst bestimmen, wie es serialisiert wird:
class Punkt {
constructor(x, y) { this.x = x; this.y = y; }
toJSON() { return [this.x, this.y]; }
}
console.log(JSON.stringify({ p: new Punkt(3, 4) }));Ausgabe:
{"p":[3,4]}Tiefe Kopie (einfach)
const original = { a: { b: 1 } };
const kopie = JSON.parse(JSON.stringify(original));
kopie.a.b = 2;
console.log(original.a.b, kopie.a.b);Ausgabe:
1 2Das 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
Übungsaufgabe
Wandle ein Objekt mit einer Liste von drei Büchern in JSON-Text um, parse den Text zurück und gib die Titel aus.
Quiz zur Selbstkontrolle
Welche Funktion macht aus einem Objekt einen JSON-Text?
- JSON.stringify (richtig)
- JSON.parse
- JSON.encode
- Object.toText
Was passiert mit Funktionen in JSON.stringify?
- Sie werden weggelassen (richtig)
- Sie werden mit gespeichert
- Es gibt einen Fehler
- Sie werden ausgeführt
Welcher Text ist gültiges JSON?
- {“a”: 1} (richtig)
- {a: 1}
- {‘a’: 1}
- {“a”: undefined}
Weiter im Kurs
Zurück: Map, Set und WeakMap
Weiter: Datum und Zeit
Alle Kapitel: JavaScript im Überblick