Pakket | Hoofdniveau |
Klasse | public final class JSON |
Overerving | JSON Object |
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11, AIR 3.0 |
In de regel voldoet de JSON-klasse van ActionScript aan de ECMA-262-specificatie. Er zijn echter uitzonderingen waarbij ActionScript meer flexibiliteit biedt dan ECMAScript, te weten:
-
In tegenstelling tot ECMAScript codeert de JSON-klasse de volgende gegevenstypen van primitieven en de bijbehorende omvattende objecten:
Type primitieve Wrapper-klasse tekenreeks String getal Number boolean Boolean -
parse()
-methode: wanneer het argument dat aan de parameterreviver
wordt doorgegeven, geen functie is, genereert ActionScript een TypeError met de fout-idkJSONInvalidReviver
. Tevens wordt een gelokaliseerd foutbericht gepost. -
stringify()
-methode: wanneer het argument dat aan de parameterreplacer
wordt doorgegeven, geen array of functie is, genereert ActionScript een TypeError met de fout-idkJSONInvalidReplacer
. Tevens wordt een gelokaliseerd foutbericht gepost. -
stringify()
methode: wanneer het argument dat aan de parameterspace
wordt doorgegeven, geen tekenreeks of getal is, wordt het omgezet in een tekenreeks. Deze tekenreeks dient als tussenruimte in de uitvoer. Volgens de ECMA-262-standaard moet de tussenruimte een lege tekenreeks zijn. -
stringify()
-methode: wanneer in de code een cyclische structuur wordt aangetroffen, wordt een TypeError met de fout-idkJSONCyclicStructure
gegenereerd. Tevens wordt een gelokaliseerd foutbericht gepost. -
ECMA-262 specificeert dat de 'eigen eigenschappen' (ofwel dynamische eigenschappen) van een object worden opgesomd wanneer JSON-conversie naar tekenreeksen plaatsvindt. Omdat ActionScript-klassen ook vaste eigenschappen kunnen declareren, worden door de
stringify()
-methode zowel dynamische eigenschappen als openbare tijdelijke eigenschappen van ActionScript-objecten opgesomd. Hierbij gaat het om eigenschappen die door getters worden gebruikt en eigenschappen die rechtstreeks worden opgeroepen.
Voor de meeste ActionScript-klassen genereert de ActionScript-methode JSON.stringify()
een standaardcodering. ActionScript-klassen kunnen deze codering wijzigen door een toJSON()
-methode in de klasse of het prototype ervan te definiëren. Voor een aantal ActionScript-klassen is de JSON-standaardcodering niet geschikt. Deze klassen bieden een eenvoudige, overschrijfbare implementatie van toJSON()
die de waarde retourneert die in de volgende tabel wordt beschreven. U kunt de toJSON()
-methoden voor deze klassen overschrijven of opnieuw definiëren als u een specifiek gedrag nodig hebt. In de volgende tabel worden deze uitzonderingen beschreven.
Klasse | Opmerkingen |
---|---|
ByteArray | Overschrijfbare toJSON() -methode retourneert de tekenreeks 'ByteArray'. |
Woordenboek | Overschrijfbare toJSON() -methode retourneert de tekenreeks 'Woordenboek'. |
Date | Overschrijfbare toJSON() -methode retourneert Date.toString() . Deze uitzondering zorgt ervoor dat de JSON-tekenreeks door de ActionScript-constructor Date kan worden geparseerd. |
XML | Overschrijfbare toJSON() -methode retourneert de tekenreeks 'XML'. |
Methode | Gedefinieerd door | ||
---|---|---|---|
Geeft aan of voor een object een opgegeven eigenschap is gedefinieerd. | Object | ||
Geeft aan of een instantie van de klasse Object zich in de prototypeketen van het object bevindt dat als parameter is opgegeven. | Object | ||
[statisch]
Accepteert een tekenreeks in JSON-indeling en retourneert een ActionScript-object waardoor die waarde wordt vertegenwoordigd. | JSON | ||
Geeft aan of de opgegeven eigenschap bestaat en kan worden opgesomd. | Object | ||
Stelt de beschikbaarheid van een dynamische eigenschap voor lusbewerkingen in. | Object | ||
[statisch]
Retourneert een tekenreeks (in JSON-indeling) waardoor een ActionScript-waarde wordt vertegenwoordigd. | JSON | ||
Geeft de tekenreeksweergave van dit object weer, geformatteerd volgens de locatiespecifieke conventies. | Object | ||
Retourneert een tekenreeksrepresentatie van het opgegeven object. | Object | ||
Retourneert de primitieve waarde van het opgegeven object. | Object |
parse | () | methode |
public static function parse(text:String, reviver:Function = null):Object
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11, AIR 3.0 |
Accepteert een tekenreeks in JSON-indeling en retourneert een ActionScript-object waardoor die waarde wordt vertegenwoordigd. Objecten, arrays, tekenreeksen, getallen, booleans en null-waarden van JSON worden toegewezen aan corresponderende ActionScript-waarden, zoals hieronder aangegeven:
JSON-type | ActionScript-type |
---|---|
array | Array |
tekenreeks | String |
getal | Number |
boolean | Boolean |
null | null |
De parameter reviver
is een functie die twee parameters gebruikt: een sleutel en een waarde. Met deze functie kunt u elk sleutelwaardepaar tijdens het parseerproces transformeren of filteren. Als u de functie reviver
opgeeft, wordt in de uitvoer van de functie parse()
de getransformeerde of gefilterde waarde voor elk paar geretourneerd in plaats van de standaardparsering . Als de functie reviver
undefined
retourneert voor een paar, wordt de eigenschap verwijderd uit het eindresultaat.
Wanneer het argument dat aan de parameter reviver
wordt doorgegeven, geen functie is, genereert ActionScript een TypeError met de fout-id kJSONInvalidReviver
. Tevens wordt een gelokaliseerd foutbericht gepost.
Als de functie parse()
dubbele sleutels in een object aantreft, levert de laatst gevonden duplicaatsleutel de waarde voor alle voorgaande exemplaren van die sleutel.
Parameters
text:String — De JSON-tekenreeks die moet worden geparseerd
| |
reviver:Function (default = null ) — (Optioneel) Een functie die elk sleutelwaardepaar dat wordt geparseerd, transformeert
|
Object |
stringify | () | methode |
public static function stringify(value:Object, replacer:* = null, space:* = null):String
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11, AIR 3.0 |
Retourneert een tekenreeks (in JSON-indeling) waardoor een ActionScript-waarde wordt vertegenwoordigd. Bij de methode stringify
kunnen drie parameters worden gebruikt.
De parameter value
is vereist. Deze parameter is een ActionScript-waarde, doorgaans een object of array, maar soms een tekenreeks, boolean, getal of null.
De optionele parameter replacer
kan een functie of een array van tekenreeksen of getallen zijn. Als deze parameter een functie is, worden twee parameters gebruikt: een sleutel en een waarde. Met deze functie kunt u elk sleutelwaardepaar tijdens het parseerproces transformeren of filteren. Als u de functie replacer
opgeeft, wordt in de uitvoer van de functie parse()
de getransformeerde of gefilterde waarde voor elk paar geretourneerd in plaats van de standaardparsering. Als de functie replacer
undefined
retourneert voor een paar, wordt de eigenschap verwijderd uit het eindresultaat. Als replacer
een array is, wordt de functie als filter gebruikt om aan te duiden welke eigenschappen in de uitvoer moeten worden opgenomen.
Wanneer het argument dat aan de parameter replacer
wordt doorgegeven, geen array of functie is, genereert ActionScript een TypeError met de fout-id kJSONInvalidReplacer
. Tevens wordt een gelokaliseerd foutbericht gepost.
De optionele parameter space
is een tekenreeks of getal waarmee witruimte aan de geretourneerde tekenreeks kan worden toegevoegd om deze beter leesbaar te maken. Items in gegenereerde JSON-objecten en JSON-arrays worden gescheiden door een tussenruimte die is afgeleid van de parameter space
. Deze tussenruimte is altijd tussen 0 en 10 tekens breed. Als space een tekenreeks is, bestaat de afgeleide tussenruimte uit de eerste tien tekens van die tekenreeks. Als space een niet-negatief getal x is, bestaat de tussenruimte uit x spatietekens (maximaal 10). Wanneer het argument dat aan de parameter space
wordt doorgegeven, geen tekenreeks of getal is, wordt het omgezet in een tekenreeks voor gebruik als de tussenruimte in de uitvoer. Vervolgens wordt de uitvoering voortgezet.
Wanneer de methode stringify()
een cyclische structuur aantreft, wordt een TypeError met de fout-id kJSONCyclicStructure
gegenereerd. Tevens wordt een gelokaliseerd foutbericht gepost.
Parameters
value:Object — De ActionScript-waarde die in een JSON-tekenreeks moet worden omgezet
| |
replacer:* (default = null ) — (Optioneel) Een functie of array die sleutelwaardeparen in de stringify -uitvoer transformeert of filtert.
| |
space:* (default = null ) — (Optioneel) Een tekenreeks of getal waardoor de witruimte wordt bepaald die aan de geretourneerde tekenreeks wordt toegevoegd
|
String |
JSONExample
-klasse om een JSON-retour in ActionScript te tonen. Dit wordt gedaan door de volgende stappen te volgen:
- De constructor voor
JSONExample
wijst een tekenreeks toe aan hettext
-lid van de superklasse en intialiseert een interne teller. - Bovendien definieert de klasse een array die JSONExample-objecten kan bevatten die zijn geëxporteerd naar JSON.
- JSONExample definieert ook een
toJSON()
-methode en eenrevive()
-methode. DetoJSON()
-methode wordt doorJSON.stringify()
aangeroepen om JSONExample-objecten te serialiseren naar JSON. Derevive()
-methode kan worden aangeroepen vanuitJSON.parse()
-methoden om het volledige JSONExample-object te herstellen. Dit herstel wordt mogelijk gemaakt door gebruik van een bepaalde id voor het ophalen van het oorspronkelijke object uit de array met herstelbare objecten. - Het script dat de klassedefinitie gebruikt, maakt een object dat twee TextField-objecten en één JSONExample-object bevat. Het maakt ook een herstelbare objectenarray waarin TextField-objecten kunnen worden opgeslagen die zijn geëxporteerd naar JSON.
- De functie
replacer
vanJSON.stringify()
filtert TextField-objecten uit de JSON-tekenreeks.replacer
verschaft in plaats van elk verwijderd object een markering met een id waarmee het object later kan worden opgehaald. JSONExample-objecten passeren daarentegen op basis van hun native JSON-codering. - De functie
reviver
van deparse()
-methode maakt het originele object opnieuw door alle TextField- en JSONExample-objecten waarnaar wordt verwezen op te halen.
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); } }
Wed Jun 13 2018, 11:42 AM Z