Paket | Oberste Ebene |
Klasse | public final class JSON |
Vererbung | JSON Object |
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3.0 |
Im Allgemeinen richtet sich die ActionScript-Klasse JSON nach der ECMA-262-Spezifikation. Die folgenden Ausnahmen gelten, wenn ActionScript mehr Flexibilität als ECMAScript bietet:
-
Anders als bei ECMAScript kodiert die ActionScript-JSON-Klasse die folgenden Rohdatentypen ebenso wie das Objekt, das sie umhüllt:
Grundtyp Wrapper-Klasse String String number Number boolean Boolescher Ausdruck -
parse()
-Methode: Wenn das an denreviver
-Parameter übergebene Argument keine Funktion ist, gibt ActionScript einen TypeError mit Fehler-IDkJSONInvalidReviver
aus. Außerdem wird eine lokalisierte Fehlermeldung angezeigt. -
stringify()
-Methode: Wenn das an denreplacer
-Parameter übergebene Argument weder ein Array noch eine Funktion ist, gibt ActionScript einen TypeError mit der Fehler-IDkJSONInvalidReplacer
aus. Außerdem wird eine lokalisierte Fehlermeldung angezeigt. -
stringify()
-Methode: Wenn das an denspace
-Parameter übergebene Argument kein String und keine Zahl ist, wird es in einen String konvertiert. Dieser String dient als die Lücke in der Ausgabe. Für ECMA-262 benötigt die Lücke für einen leeren String. -
stringify()
-Methode: Wenn der Code eine zyklische Struktur erkennt, wird ein TypeError mit der Fehler-IDkJSONCyclicStructure
ausgegeben. Außerdem wird eine lokalisierte Fehlermeldung angezeigt. -
ECMA-262 legt fest, dass bei der JSON-Stringkonvertierung die „eigenen Eigenschaften“ eines Objekts aufgezählt werden; damit sind die dynamischen Eigenschaften des Objekts gemeint. Da ActionScript-Klassen auch feste Eigenschaften deklarieren, zählt die ActionScript-Methode
stringify()
sowohl dynamische Eigenschaften als auch öffentliche dauerhafte Eigenschaften für ActionScript-Objekte auf. Zu diesen Eigenschaften gehören Eigenschaften, auf die durch Getter zugegriffen wird, sowie Eigenschaften, auf die direkt zugegriffen wird.
Für die meisten ActionScript-Klassen generiert die ActionScript-Methode JSON.stringify()
eine Standardkodierung. ActionScript-Klassen können diese Kodierung ändern, indem sie eine toJSON()
-Methode in der Klasse oder in ihrem Prototyp definieren. Für einige ActionScript-Klassen ist die standardmäßige JSON-Kodierung nicht geeignet. Diese Klassen stellen eine einfache, überschreibbare Implementierung von toJSON()
bereit, die den in der folgenden Tabelle beschriebenen Wert zurückgibt. Sie können die toJSON()
-Methoden in diesen Klassen überschreiben oder neu definieren, wenn Sie ein bestimmtes Verhalten benötigen. In der folgenden Tabelle sind diese Ausnahmen beschrieben:
Klasse | Kommentare |
---|---|
ByteArray | Die überschreibbare toJSON() -Methode gibt den String „ByteArray“ zurück. |
Wörterbuch | Die überschreibbare toJSON() -Methode gibt den String „Dictionary“ zurück. |
Datum | Die überschreibbare toJSON() -Methode gibt Date.toString() zurück. Diese Ausnahme gewährleistet, dass der ActionScript-Date-Konstruktor den JSON-String parsen kann. |
XML | Die überschreibbare toJSON() -Methode gibt den String „XML“ zurück. |
Methode | Definiert von | ||
---|---|---|---|
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. | Object | ||
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. | Object | ||
[statisch]
Akzeptiert einen String im JSON-Format und gibt ein ActionScript-Objekt zurück, das diesen Wert darstellt. | JSON | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. | Object | ||
[statisch]
Gibt einen String im JSON-Format zurück, der einen ActionScript-Wert darstellt. | JSON | ||
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas. | Object | ||
Gibt das angegebene Objekt als String zurück. | Object | ||
Gibt den Grundwert des angegebenen Objekts zurück. | Object |
parse | () | Methode |
public static function parse(text:String, reviver:Function = null):Object
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3.0 |
Akzeptiert einen String im JSON-Format und gibt ein ActionScript-Objekt zurück, das diesen Wert darstellt. JSON-Objekte, -Arrays, -Strings, -Zahlen, -Booleans sowie Null werden entsprechenden ActionScript-Werten zugeordnet, wie unten aufgeführt:
JSON-Typ | ActionScript-Typ |
---|---|
array | Array |
String | String |
number | Number |
boolean | Boolescher Ausdruck |
null | null |
Der reviver
-Parameter ist eine Funktion, der zwei Parameter verwendet: einen Schlüssel und einen Wert. Sie können diese Funktion verwenden, um jedes Schlüssel/Wert-Paar beim Parsen zu transformieren oder zu filtern. Wenn Sie eine reviver
-Funktion angeben, wird in der Ausgabe der parse()
-Funktion für jedes Paar der transformierte oder gefilterte Wert anstatt des Standardparsings zurückgegeben. Wenn die reviver
-Funktion für ein Paar undefined
zurückgibt, wird die Eigenschaft aus dem endgültigen Ergebnis gelöscht.
Wenn das an den reviver
-Parameter übergebene Argument keine Funktion ist, gibt ActionScript einen TypeError mit der Fehler-ID kJSONInvalidReviver
aus. Außerdem wird eine lokalisierte Fehlermeldung angezeigt.
Wenn die parse()
-Funktion innerhalb eines Objekts doppelt vorhandene Schlüssel erkennt, stellt das zuletzt gefundene Duplikat des Schlüssels den Wert für alle vorhergehenden Vorkommnisse des Schlüssels bereit.
Parameter
text:String — Der zu parsende JSON-String
| |
reviver:Function (default = null ) — (Optional) Eine Funktion, die jedes geparste Schlüssel/Wert-Paar transformiert
|
Object |
stringify | () | Methode |
public static function stringify(value:Object, replacer:* = null, space:* = null):String
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3.0 |
Gibt einen String im JSON-Format zurück, der einen ActionScript-Wert darstellt. Die stringify
-Methode kann drei Parameter akzeptieren.
Der value
-Parameter ist erforderlich. Dieser Parameter ist ein ActionScript-Wert. Normalerweise handelt es sich um ein Objekt oder ein Array, es kann aber auch ein String, ein boolescher Ausdruck, eine Zahl oder null sein.
Der optionale replacer
-Parameter kann eine Funktion oder ein Array von Strings oder Zahlen sein. Wenn es sich um eine Funktion handelt, verwendet diese zwei Parameter: einen Schlüssel und einen Wert. Sie können diese Funktion verwenden, um jedes Schlüssel/Wert-Paar beim Parsen zu transformieren oder zu filtern. Wenn Sie eine replacer
-Funktion angeben, wird in der Ausgabe der parse()
-Funktion für jedes Paar der transformierte oder gefilterte Wert anstatt des Standardparsings zurückgegeben. Wenn die replacer
-Funktion für ein Paar undefined
zurückgibt, wird die Eigenschaft aus dem endgültigen Ergebnis gelöscht. Wenn es sich bei replacer
um ein Array handelt, wird dieses als Filter verwendet, um zu bestimmen, welche Eigenschaften in der Ausgabe enthalten sind.
Wenn das an den replacer
-Parameter übergebene Argument weder ein Array noch eine Funktion ist, gibt ActionScript einen TypeError mit der Fehler-ID kJSONInvalidReplacer
aus. Außerdem wird eine lokalisierte Fehlermeldung angezeigt.
Der optionale space
-Parameter ist ein String oder eine Zahl, der/die es zulässt, dass Leerraum in den zurückgegebenen String eingefügt wird, um die Lesbarkeit zu verbessern. Einträge in generierten JSON-Objekten und JSON-Arrays werden durch eine Lücke getrennt, die aus dem space
-Parameter abgeleitet wird. Die Lücke ist immer 0 bis 10 Zeichen breit. Wenn es sich bei „space“ um einen String handelt, besteht die abgeleitete Lücke aus den ersten zehn Zeichen dieses Strings. Wenn es sich bei „space“ um eine nicht negative Zahl x handelt, beträgt die Lücke x Leerzeichen, jedoch maximal zehn Leerzeichen. Wenn es sich bei dem an den space
-Parameter übergebenen Argument nicht um einen String oder eine Zahl handelt, wird es in einen String konvertiert, der als Lücke in der Ausgabe verwendet wird. Die Ausführung wird dann fortgesetzt.
Wenn die stringify()
-Methode eine zyklische Struktur erkennt, wird ein TypeError mit der Fehler-ID kJSONCyclicStructure
ausgegeben. Außerdem wird eine lokalisierte Fehlermeldung angezeigt.
Parameter
value:Object — Der ActionScript-Wert, der in einen JSON-String konvertiert werden soll
| |
replacer:* (default = null ) — (Optional) Eine Funktion oder ein Array, die/das Schlüssel/Wert-Paare in der stringify -Ausgabe transformiert oder filtert
| |
space:* (default = null ) — (Optional) Ein String oder eine Zahl, der/die im zurückgegebenen String hinzugefügten Leerraum steuert
|
String |
JSONExample
-Klasse verwendet, um einen JSON-Round-Trip in ActionScript zu zeigen. Dies wird in den folgenden Schritten erreicht:
- Der Konstruktor für
JSONExample
weist demtext
-Mitglied der übergeordneten Klasse einen String zu und initialisiert einen internen Zähler. - Zusätzlich definiert die Klasse ein Array, das JSONExample-Objekte enthalten kann, die nach JSON exportiert wurden.
- JSONExample definiert außerdem eine
toJSON()
-Methode und einerevive()
-Methode. DietoJSON()
-Methode wird vonJSON.stringify()
aufgerufen, um JSONExample-Objekte für JSON zu serialisieren. Dierevive()
-Methode kann vonJSON.parse()
-Methoden aufgerufen werden, um das vollständige JSONExample-Objekt wiederherzustellen. Diese Wiederherstellung wird erreicht, indem eine gegebene ID verwendet wird, um das Originalobjekt aus dem Array mit wiederherstellbaren Objekten abzurufen. - Das Skript, das die Klassendefinition verwendet, erstellt ein Objekt, das zwei TextField-Objekte und ein JSONExample-Objekt enthält. Es erstellt auch ein Array für wiederherstellbare Objekte zum Speichern von TextField-Objekten, die nach JSON exportiert wurden.
- Die
replacer
-Funktion vonJSON.stringify()
filtert TextField-Objekte aus dem JSON-String. Als Ersatz für jedes entfernte Objekt stelltreplacer
einen Marker mit einer ID bereit, mit dem sich das betreffende Objekt später abrufen lässt. JSONExample-Objekte passieren dagegen entsprechend ihrer nativen JSON-Kodierung. - Die
reviver
-Funktion derparse()
-Methode stellt das Originalobjekt wieder her, indem alle referenzierten TextField- und JSONExample-Objekte abgerufen werden.
package { import flash.text.TextField; public class JSONExample extends TextField { static var nextId = 10000; static var revivable_objects:Array = []; public var id; public function JSONExample(s:String){ super.text = s; id = ++nextId; } public function toJSON(k):* { // To be called internally by the JSON.stringify() method. // Save the original object internally. // Write out only a generated ID and the text value. revivable_objects[id] = this; return {"classJSONExample":{"reviveId":id,"contents":this.text}}; } public static function revive(id:int):JSONExample { // For explicit use in the JSON.parse() method. // Revives the object using the ID obtained from the JSON string. return revivable_objects[id]; } } } import flash.text.TextField; var lastId = 20000; var tf1:TextField = new TextField(); tf1.text = "Lorem ipsum"; var tf2:TextField = new TextField(); tf2.text = "Laughing cows"; var nt:JSONExample = new JSONExample("It was the best of times; it was the worst of times."); var obj:Object = {a:tf1, b:nt, c:tf2}; var revivable_objects:Array = new Array(); var json_out = JSON.stringify(obj, function(k,v){ if (v is JSONExample) { // Send JSONExample objects to the JSON output. // Note that stringify() calls JSONExample.toJSON() to serialize this object. return v; } if (v is TextField) { // Remove TextField objects from the JSON output. // Save the original object for reviving later. // Return a new object containing an identification marker // and the original object's revival ID. revivable_objects[++lastId] = v; return {"classTextField":{"reviveId":lastId}}; } return v; } ); trace("json_out: " + json_out); var json_in = JSON.parse(json_out, function(k,v) { if ("classTextField" in v) { // special marker tag from stringify() replacer code // Retrieve the original object based on the ID stored in the stringify() replacer function. var id = v["classTextField"].reviveId; return revivable_objects[id]; } else if ("classJSONExample" in v){ // Retrieve the original object based on the ID generated in JSONExample.toJSON(). return JSONExample.revive(v["classJSONExample"].reviveId); } return v; } ); if (json_in.a) { if (json_in.a.hasOwnProperty("text")) { trace("json_in.a: " + json_in.a.text); } } if (json_in.b) { if (json_in.b.hasOwnProperty("text")) { trace("json_in.b: " + json_in.b.text); } } if (json_in.c) { if (json_in.c.hasOwnProperty("text")) { trace("json_in.c: " + json_in.c.text); } }
Tue Jun 12 2018, 10:04 AM Z