JavaScript JSON-Methoden, toJSON
Die JavaScript Object Notation (JSON) ist ein bemerkenswertes Format zur Darstellung von Objekten und Werten. Ursprünglich wurde dieses Format für JavaScript erstellt, aber mehrere Sprachen umfassen auch Bibliotheken für dessen Verarbeitung. Daher ist es einfacher, JSON zur Datenaustausch zu verwenden, falls der Client JavaScript verwendet und der Server in PHP, Ruby, Java und mehr geschrieben ist.
Im Allgemeinen bietet JavaScript zwei Methoden zur Konvertierung: JSON.stringify und JSON.parse. Sie können die erste Methode zum Konvertieren von Objekten in JSON und die zweite zum Konvertieren von JSON zurück in ein Objekt verwenden.
JSON.stringify
Betrachten Sie das folgende Beispiel zur Verwendung von JSON.stringify:
Bitte beachten Sie, dass ein JSON-codiertes Objekt sich vom Objekt-Literal unterscheidet. Die Hauptunterschiede sind wie folgt:
- Der String verwendet doppelte Anführungszeichen. Es sollten keine einfachen Anführungszeichen oder Backticks in JSON sein. Zum Beispiel wird 'W3Docs' zu "W3Docs".
- Doppelte Anführungszeichen sollten auch für Eigenschaftsnamen von Objekten verwendet werden. Es ist obligatorisch. Zum Beispiel wird booksCount : 4 zu "booksCount": 4.
Sie können die Methode JSON.stringify auch auf Primitive anwenden. Es unterstützt die folgenden Datentypen:
Hier ist ein Beispiel:
Beachten Sie, dass JSON.stringify einige JavaScript-spezifische Objekte überspringt, wie zum Beispiel Funktionseigenschaften (Methoden), symbolische Eigenschaften und Eigenschaften, die undefined speichern.
Betrachten wir den folgenden Fall:
Das Beste daran ist, dass verschachtelte Objekte automatisch unterstützt und konvertiert werden.
Zum Beispiel:
Aber es gibt auch eine wesentliche Einschränkung: Sie dürfen keine zirkulären Verweise verwenden.
Zum Beispiel:
Ausschließen und Transformieren: replacer
Für JSON.stringify wird die folgende vollständige Syntax verwendet:
let json = JSON.stringify(value[, replacer, space])
Es hat drei Argumente:
- der Wert: ein Wert zur Codierung;
- der replacer: das Array der Eigenschaften zur Codierung oder eine Mapping-Funktion function(key, value);;
- der Raum: Anzahl der für die Formatierung verwendeten Leerzeichen.
JSON.stringify verwendet die meiste Zeit das erste Argument. Wenn Sie jedoch Ihren Ersetzungsprozess verbessern möchten, können Sie auch das zweite Argument verwenden. Wenn ihm ein Array von Eigenschaften übergeben wird, werden nur diese Eigenschaften codiert.
Betrachten wir das Beispiel:
Jetzt versuchen wir, alle Eigenschaften in die Liste aufzunehmen, ausgenommen books.free:
Wie Sie sehen können, wird alles serialisiert, außer canUse. Sie können auch feststellen, dass die gegebene Liste ziemlich lang aussieht. Glücklicherweise kann die Funktion replacer aufgerufen werden. Sie kann für jedes key, value Paar aufgerufen werden, und der “ersetzte” Wert kann zurückgegeben werden. Sie können es anstelle des ursprünglichen Wertes verwenden. Um das canUse zu ignorieren, wird undefined in dem unten stehenden Beispiel zurückgegeben:
Beachten Sie, dass die replacer Funktion jedes Schlüssel/Wert-Paar zusammen mit Array-Elementen und verschachtelten Objekten erhält.
Formatierung: Raum
Wie bereits erwähnt, hat JSON.stringify drei Argumente. Das dritte ist die Anzahl der für die Formatierung verwendeten Leerzeichen. In der Regel verwenden Entwickler das space-Argument, um eine ausgezeichnete Ausgabe zu erreichen.
Der space = 2 beauftragt JavaScript, die verschachtelten Objekte auf verschiedenen Zeilen mit einer Einrückung von zwei Leerzeichen innerhalb eines Objekts anzuzeigen.
Zum Beispiel:
Benutzerdefiniertes “toJSON”
In der Regel kann ein Objekt die Methode toJSON bereitstellen, um die to-JSON-Konvertierung zu implementieren. Wenn es verfügbar ist, ruft JSON.stringify es automatisch auf.
Hier ist ein Beispiel:
Im obigen Fall wird das update (1) in einen String umgewandelt. Der Grund dafür ist, dass alle Daten eine eingebaute toJSON-Methode haben.
Wenn Sie ein benutzerdefiniertes toJSON für das books-Objekt (2) hinzufügen, sieht es wie folgt aus:
JSON.parse
Zum Dekodieren eines JSON-Strings wird eine andere Methode verwendet, die JSON.parse heißt, mit der folgenden Syntax:
let value = JSON.parse(str, [reviver]);
JSON ist etwas kompliziert: Objekte und Arrays können andere Objekte und Arrays enthalten. Aber es ist obligatorisch, das Format von JSON einzuhalten.
Unten finden Sie die typischen Fehler in handgeschriebenen JSON:
let json = `{
welcome: "Welcome", // mistake: property name without quotes
"site": 'W3Docs', // mistake: single quotes in value (must be double)
'hasAdmin': true // mistake: single quotes in key (must be double)
"update": new Date(2000, 2, 3), // mistake: no "new" is allowed, only bare values
"books": [1, 2, 3, 4] // here all fine
}`;
Beachten Sie auch, dass JSON keine Kommentare zulässt. Wenn Sie einen Kommentar hinzufügen, wird es ungültig. Es gibt ein spezielles Format JSON, das nicht zitierte Schlüssel, Kommentare und mehr unterstützt.
Zusammenfassung
JSON stellt ein Datenformat mit unabhängigem Standard und Bibliotheken für die meisten Programmiersprachen dar. Es unterstützt Arrays, Strings, Objekte, boolesche Werte, Zahlen und null.
JavaScript hat die Methoden JSON.stringify zum Serialisieren in JSON und JSON.parse zum Lesen aus JSON. Wenn ein Objekt toJSON hat, muss es durch JSON.stringify. aufgerufen werden.
Quizzeit: Testen Sie Ihre Fähigkeiten!
Sind Sie bereit, das Gelernte herauszufordern? Tauchen Sie ein in unsere interaktiven Quizze für ein tieferes Verständnis und eine unterhaltsame Art, Ihr Wissen zu festigen.