Paket | Översta nivån |
Klass | public final class JSON |
Arv | JSON Object |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11, AIR 3.0 |
I stort sett följer JSON-klassen för ActionScript ECMA-262-specifikationen. Emellertid finns följande undantag där ActionScript ger större flexibilitet än ECMAScript:
-
Till skillnad från ECMAScript kodar JSON-klassen för ActionScript följande primitiva datatyper samt objekten som omsluter dem:
Primitiv typ Klassen Wrapper string String tal Nummer boolean Boolean -
Metoden
parse()
: När argumentet som skickas till parameternreviver
inte är en funktion, kommer ActionScript att generera ett TypeError med fel-IDkJSONInvalidReviver
. Dessutom skapas ett anpassat felmeddelande. -
Metoden
stringify()
: När argumentet som skickas till parameternreplacer
varken är en array eller en funktion, kommer ActionScript att generera ett TypeError med fel-IDkJSONInvalidReplacer
. Dessutom skapas ett anpassat felmeddelande. -
Metoden
stringify()
: När argumentet som skickas till parameternspace
inte är String eller Number, kommer den att konverteras till String. Strängen har till syfte att skapa ett mellanrum i utdata. För ECMA-262 krävs att mellanrummet är en tom sträng. -
Metoden
stringify()
: När en cyklisk struktur upptäcks i koden kommer ett TypeError med fel-IDkJSONCyclicStructure
att genereras. Dessutom skapas ett anpassat felmeddelande. -
I ECMA-262 anges att JSON-strängen räknar upp de "egna egenskaperna" för ett objekt, vilket betyder objektets dynamiska egenskaper. Eftersom det i ActionScript-klasser även går att deklarera fasta egenskaper, kommer ActionScript-metoden
stringify()
att räkna upp både dynamiska egenskaper och offentliga icke-transienta egenskaper för ActionScript-objekt. Dessa egenskaper innehåller egenskaper som går att komma åt med get-metoder samt egenskaper som går att komma åt direkt.
För de flesta ActionScript-klasser gäller att ActionScript-metoden JSON.stringify()
genererar en standardkodning. ActionScript-klasser kan ändra denna kodning genom att definiera en toJSON()
-metod i klassen eller i dess prototyp. För några få ActionScript-klasser är standardkodningen för JSON olämplig. Dessa klasser erbjuder en betydelselös och åsidosättningsbar implementering av toJSON()
som returnerar värdet som beskrivs i följande tabell. Du kan åsidosätta eller omdefiniera toJSON()
-metoderna för dessa klasser om du eftersträvar ett specifikt beteende. I tabellen nedan beskrivs dessa undantag:
Klass | Kommentarer |
---|---|
ByteArray | Åsidosättningsbar toJSON() -metod som returnerar strängen "ByteArray". |
Ordlista | Åsidosättningsbar toJSON() -metod som returnerar strängen "Dictionary". |
Date | Åsidosättningsbar toJSON() -metod som returnerar Date.toString() . Detta undantag garanterar att Date-konstruktorn i ActionScript kan tolka JSON-strängen. |
XML | Åsidosättningsbar toJSON() -metod som returnerar strängen "XML". |
Metod | Definieras med | ||
---|---|---|---|
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
[statisk]
Godtar en JSON-formaterad sträng och returnerar ett ActionScript-objekt som representerar värdet. | JSON | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
[statisk]
Returnerar en sträng, i JSON-format, som representerar ett ActionScript-värde. | JSON | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
Returnerar det angivna objektets strängbeteckning. | Object | ||
Returnerar det angivna objektets primitiva värde. | Object |
parse | () | metod |
public static function parse(text:String, reviver:Function = null):Object
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11, AIR 3.0 |
Godtar en JSON-formaterad sträng och returnerar ett ActionScript-objekt som representerar värdet. JSON-objekt, arrayer, strängar, tal, booleska värden och null-mappning som motsvarar ActionScript-värden, enligt nedan:
JSON-typ | ActionScript-typ |
---|---|
array | Array |
string | String |
tal | Nummer |
boolean | Boolean |
null | null |
Parametern reviver
är en funktion som har två parametrar: en nyckel och ett värde. Du kan använda den här funktionen för att omforma eller filtrera varje nyckel/värdepar medan den/det tolkas. Om du levererar en reviver
-funktion, returneras ditt omformade eller filtrerade värde för varje par och inte standardtolkningen i parse()
-funktionens utdata. Om reviver
-funktionen returnerar undefined
för något av paren, kommer egenskapen att tas bort från slutresultatet.
När argumentet som skickas till reviver
parametern inte är en funktion, kommer ActionScript att generera ett TypeError med fel-ID kJSONInvalidReviver
. Dessutom skapas ett anpassat felmeddelande.
Om parse()
-funktionen upptäcker dubbla nycklar i ett objekt, kommer den nyckeldubblett som upptäcktes sist att leverera värdet för alla tidigare förekomster av den nyckeln.
Parametrar
text:String — JSON-strängen som ska tolkas
| |
reviver:Function (default = null ) — (Valfritt) En funktion som omformar varje nyckel/värdepar som tolkas
|
Object |
stringify | () | metod |
public static function stringify(value:Object, replacer:* = null, space:* = null):String
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11, AIR 3.0 |
Returnerar en sträng, i JSON-format, som representerar ett ActionScript-värde. Metoden stringify
kan innehålla tre parametrar.
Parametern value
är obligatorisk. Denna parameter är ett ActionScript-värde. Vanligtvis är det ett objekt eller en array, men det kan även vara en sträng, booleskt värde, tal eller null.
Den valfria parametern replacer
kan antingen vara en funktion eller en array med strängar eller tal. Om det är en funktion ska funktionen ha två parametrar: en nyckel och ett värde. Du kan använda den här funktionen för att omforma eller filtrera varje nyckel/värdepar medan den/det tolkas. Om du levererar en replacer
-funktion, returneras ditt omformade eller filtrerade värde för varje par och inte standardtolkningen i parse()
-funktionens utdata. Om replacer
-funktionen returnerar undefined
för något av paren, kommer egenskapen att tas bort från slutresultatet. Om replacer
är en array, används det som ett filter för att bestämma vilka egenskaper som ska inkluderas i utdata.
När argumentet som skickas till parametern replacer
varken är en array eller en funktion, kommer ActionScript att generera ett TypeError med fel-ID kJSONInvalidReplacer
. Dessutom skapas ett anpassat felmeddelande.
Den valfria parametern space
är en sträng eller ett tal som tillåter att tomt utrymme kan infogas i den returnerade strängen för att göra den lättare att läsa. Poster i genererade JSON-objekt och JSON-arrayer separeras med ett mellanrum härlett från parameternspace
. Detta mellanrum är alltid 0 till 10 tecken brett. Om space är en sträng kommer det härledda mellanrummet att vara de tio första tecknen för strängen. Om space är ett icke-negativt tal x, kommer mellanrummet att vara x blanksteg, maximalt tio. När argumentet som skickas till space
-parametern inte är en sträng eller ett tal, konverteras det till en sträng som ska användas som mellanrum i utdata. Sedan fortsätter körningen.
När metoden stringify()
upptäcker en cyklisk struktur, genereras ett TypeError med fel-ID kJSONCyclicStructure
. Dessutom skapas ett anpassat felmeddelande.
Parametrar
value:Object — ActionScript-värdet som konverteras till en JSON-sträng
| |
replacer:* (default = null ) — (Valfritt) En funktion eller en array som omformas eller filtreras till nyckel-/värdepar i utdata för stringify
| |
space:* (default = null ) — (Valfritt) En sträng eller ett tal som kontrollerar tillagt tomt utrymme i den returnerade strängen
|
String |
JSONExample
för att visa en JSON-roundtrip i ActionScript. Detta visas i följande steg:
- Konstruktorn för
JSONExample
tilldelar en sträng till superklassenstext
-medlem och initierar en intern räknare. - Klassen definierar dessutom en array som kan innehålla JSONExample-objekt som har exporterats till JSON.
- JSONExample definierar även en
toJSON()
-metod och enrevive()
-metod. MetodentoJSON()
anropas avJSON.stringify()
för att serialisera JSONExample-objekt till JSON. Metodenrevive()
kan anropas frånJSON.parse()
-metoder för att återställa det fullständiga JSONExample-objektet. Denna återställning uppnås genom att ett visst ID används för att hämta originalobjektet från arrayen med återställningsbara objekt. - Det skript som använder klassdefinitionen skapar ett objekt som innehåller två TextField-objekt och ett JSONExample-objekt. Det skapar också en array med återställningsbara objekt för lagring av TextField-objekt som har exporterats till JSON.
- Funktionen
replacer
förJSON.stringify()
filtrerar TextField-objekt från JSON-strängen. På varje borttaget objekts plats tillhandahållerreplacer
en markör med ett ID som kan användas senare för att hämta objektet. JSONExample-objekt, å andra sidan, skickas i enlighet med deras ursprungliga JSON-kodning. - Funktionen
reviver
för metodenparse()
återskapar det ursprungliga objektet genom att hämta alla TextField- och JSONExample-objekt som refereras.
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, 01:40 PM Z