ActionScript® 3.0 Referenzhandbuch für die Adobe® Flash®-Plattform
Home  |  Liste der Pakete und Klassen ausblenden |  Pakete  |  Klassen  |  Neue Funktionen  |  Stichwortverzeichnis  |  Anhänge  |  Warum auf Englisch?
Filter: Daten werden vom Server abgerufen...
Daten werden vom Server abgerufen...
Oberste Ebene 

JSON  - AS3

PaketOberste Ebene
Klassepublic final class JSON
VererbungJSON Inheritance Object

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3.0

Die JSON-Klasse ermöglicht Anwendungen das Importieren und Exportieren von Daten im Format JavaScript Object Notation (JSON). JSON ist ein Datenaustauschformat im Branchenstandard. Ausführliche Informationen finden Sie unter http://www.json.org.

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:

    GrundtypWrapper-Klasse
    StringString
    numberNumber
    booleanBoolescher Ausdruck
  • parse()-Methode: Wenn das an den reviver-Parameter übergebene Argument keine Funktion ist, gibt ActionScript einen TypeError mit Fehler-ID kJSONInvalidReviver aus. Außerdem wird eine lokalisierte Fehlermeldung angezeigt.

  • stringify()-Methode: 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.

  • stringify()-Methode: Wenn das an den space-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-ID kJSONCyclicStructure 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:

KlasseKommentare
ByteArrayDie überschreibbare toJSON()-Methode gibt den String „ByteArray“ zurück.
WörterbuchDie überschreibbare toJSON()-Methode gibt den String „Dictionary“ zurück.
DatumDie überschreibbare toJSON()-Methode gibt Date.toString() zurück. Diese Ausnahme gewährleistet, dass der ActionScript-Date-Konstruktor den JSON-String parsen kann.
XMLDie überschreibbare toJSON()-Methode gibt den String „XML“ zurück.

Beispiele anzeigen



Öffentliche Eigenschaften
 EigenschaftDefiniert von
 Inheritedconstructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz.
Object
Öffentliche Methoden
 MethodeDefiniert von
 Inherited
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde.
Object
 Inherited
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde.
Object
  
parse(text:String, reviver:Function = null):Object
[statisch] Akzeptiert einen String im JSON-Format und gibt ein ActionScript-Objekt zurück, das diesen Wert darstellt.
JSON
 Inherited
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann.
Object
 Inherited
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest.
Object
  
stringify(value:Object, replacer:* = null, space:* = null):String
[statisch] Gibt einen String im JSON-Format zurück, der einen ActionScript-Wert darstellt.
JSON
 Inherited
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas.
Object
 Inherited
Gibt das angegebene Objekt als String zurück.
Object
 Inherited
Gibt den Grundwert des angegebenen Objekts zurück.
Object
Methodendetails

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-TypActionScript-Typ
arrayArray
StringString
numberNumber
booleanBoolescher Ausdruck
nullnull

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

Rückgabewerte
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

Rückgabewerte
String
JSONExample.as

Im folgenden Beispiel wird die JSONExample-Klasse verwendet, um einen JSON-Round-Trip in ActionScript zu zeigen. Dies wird in den folgenden Schritten erreicht:
  1. Der Konstruktor für JSONExample weist dem text-Mitglied der übergeordneten Klasse einen String zu und initialisiert einen internen Zähler.
  2. Zusätzlich definiert die Klasse ein Array, das JSONExample-Objekte enthalten kann, die nach JSON exportiert wurden.
  3. JSONExample definiert außerdem eine toJSON()-Methode und eine revive()-Methode. Die toJSON()-Methode wird von JSON.stringify() aufgerufen, um JSONExample-Objekte für JSON zu serialisieren. Die revive()-Methode kann von JSON.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.
  4. 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.
  5. Die replacer-Funktion von JSON.stringify() filtert TextField-Objekte aus dem JSON-String. Als Ersatz für jedes entfernte Objekt stellt replacer 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.
  6. Die reviver-Funktion der parse()-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);
        }
}
               




[ X ]Warum auf Englisch?
Inhalt des ActionScript 3.0-Referenzhandbuchs wird in englischer Sprache angezeigt

Nicht alle Teile des ActionScript 3.0-Referenzhandbuchs wurden in alle Sprachen übersetzt. Wenn der Text zu einem Sprachelement nicht übersetzt wurde, wird er auf Englisch angezeigt. Zum Beispiel wurden die Informationen zur ga.controls.HelpBox-Klasse nicht in andere Sprachen übersetzt. In der deutschen Version des Referenzhandbuchs erscheint der Abschnitt zur ga.controls.HelpBox-Klasse deshalb auf Englisch.