Package | Niveau supérieur |
Classe | public final class JSON |
Héritage | JSON Object |
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3.0 |
En règle générale, la classe JSON ActionScript est conforme à la spécification ECMA-262. Les exceptions suivantes se produisent lorsqu’ActionScript offre plus de souplesse qu’ECMAScript :
-
Contrairement à ECMAScript, la classe JSON ActionScript chiffre les données primitives suivantes, ainsi que les objets qui les intègrent :
Type primitif Classe d’enveloppe chaîne String nombre Number valeur booléenne Boolean -
Méthode
parse()
: lorsque l’argument transmis au paramètrereviver
n’est pas une fonction, ActionScript renvoie une exception TypeError avec l’ID d’erreurkJSONInvalidReviver
. Il publie également un message d’erreur localisé. -
Méthode
Stringify()
: lorsque l’argument transmis au paramètrereplacer
n’est ni un tableau ni une fonction, ActionScript renvoie une exception TypeError avec l’ID d’erreurkJSONInvalidReplacer
. Il publie également un message d’erreur localisé. -
Méthode
Stringify()
: lorsque l’argument transmis au paramètrespace
n’est ni une chaîne ni nombre, il est converti en chaîne. Cette chaîne sert d’espace dans la sortie. ECMA-262 exige que l’espace soit une chaîne vide. -
Méthode
Stringify()
: lorsque le code rencontre une structure cyclique, il renvoie une exception TypeError avec l’ID d’erreurkJSONCyclicStructure
. Il publie également un message d’erreur localisé. -
ECMA-262 spécifie que la conversion en chaîne de JSON énumère les « propriétés intrinsèques » d’un objet, c’est-à-dire ses propriétés dynamiques. Etant donné que les classes ActionScript peuvent également déclarer des propriétés fixes, la méthode
stringify()
d’ActionScript énumère les propriétés dynamiques et les propriétés publiques non transitoires sur les objets ActionScript. Ces propriétés contiennent des propriétés accessibles par des accesseurs Get, ainsi que des propriétés directement accessibles.
Pour la plupart des classes ActionScript, la méthode JSON.stringify()
d’ActionScript génère un encodage par défaut. Les classes ActionScript peuvent changer cet encodage en définissant une méthode toJSON()
dans la classe ou son prototype. L’encodage JSON par défaut ne convient pas à certaines classes ActionScript. Ces classes fournissent une implémentation triviale et remplaçable de la méthode toJSON()
, qui renvoie la valeur décrite dans le tableau suivant. Vous pouvez remplacer ou redéfinir les méthodes toJSON()
sur ces classes si vous souhaitez obtenir un comportement particulier. Le tableau suivant décrit ces exceptions :
Classe | Commentaires |
---|---|
ByteArray | La méthode toJSON() remplaçable renvoie la chaîne "ByteArray". |
Dictionnaire | La méthode toJSON() remplaçable renvoie la chaîne "Dictionary". |
Date | La méthode toJSON() remplaçable renvoie Date.toString() . Cette exception garantit que le constructeur de date ActionScript peut analyser la chaîne JSON. |
XML | La méthode toJSON() remplaçable renvoie la chaîne "XML". |
Plus d’exemples
Définition de la méthode toJSON() sur le prototype d’une classe intégrée
Définition ou remplacement de toJSON() au niveau de la classe
Utilisation du paramètre replacer de la méthode JSON.stringify()
Utilisation du paramètre reviver de la méthode JSON.parse()
Exemple d’analyse
Informations complémentaires
Méthode | Défini par | ||
---|---|---|---|
Indique si la propriété spécifiée d’un objet est définie. | Object | ||
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l’objet spécifié en tant que paramètre. | Object | ||
[statique]
Prend en charge une chaîne au format JSON et renvoie un objet ActionScript qui représente cette valeur. | JSON | ||
Indique si la propriété spécifiée existe et est énumérable. | Object | ||
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle. | Object | ||
[statique]
Renvoie une chaîne, au format JSON, qui représente une valeur ActionScript. | JSON | ||
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur. | Object | ||
Renvoie la représentation sous forme de chaîne de l’objet spécifié. | Object | ||
Renvoie la valeur primitive de l’objet spécifié. | Object |
parse | () | méthode |
public static function parse(text:String, reviver:Function = null):Object
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3.0 |
Prend en charge une chaîne au format JSON et renvoie un objet ActionScript qui représente cette valeur. Les objets, tableaux, chaînes, nombres, valeurs booléennes et valeurs null JSON correspondent aux valeurs ActionScript suivantes, comme indiqué ci-dessous :
Type JSON | Type ActionScript |
---|---|
tableau | Array |
chaîne | String |
nombre | Number |
valeur booléenne | Boolean |
null | null |
Le paramètre reviver
est une fonction qui prend deux paramètres : une clé et une valeur. Vous pouvez utiliser cette fonction pour transformer ou filtrer chaque paire clé/valeur telle qu’elle est analysée. Si vous fournissez une fonction reviver
, c’est votre valeur transformée ou filtrée pour chaque paire qui est renvoyée dans la fonction de sortie parse()
, et non la valeur d’analyse par défaut. Si la fonction reviver
renvoie undefined
pour une paire, la propriété est supprimée du résultat final.
Lorsque l’argument transmis au paramètre reviver
n’est pas une fonction, ActionScript renvoie une exception TypeError avec l’ID d’erreur kJSONInvalidReviver
. Il publie également un message d’erreur localisé.
Si la fonction parse()
rencontre des clés dupliquées au sein d’un objet, la clé en double trouvée en dernier fournit la valeur pour toutes les occurrences précédentes de cette clé.
Paramètres
text:String — Chaîne JSON à analyser.
| |
reviver:Function (default = null ) — (Facultatif) Fonction qui transforme chaque paire clé/valeur qui est analysée
|
Object |
stringify | () | méthode |
public static function stringify(value:Object, replacer:* = null, space:* = null):String
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3.0 |
Renvoie une chaîne, au format JSON, qui représente une valeur ActionScript. La méthode stringify
peut prendre trois paramètres.
Le paramètre value
est requis. Ce paramètre est une valeur ActionScript. En règle générale, il s’agit d’un objet ou un tableau, mais il peut également s’agir d’une chaîne, d’une valeur booléenne, d’un nombre ou d’une valeur nulle.
Le paramètre replacer
facultatif peut être une fonction ou un tableau de chaînes ou de numéros. S’il s’agit d’une fonction, celle-ci prend deux paramètres : une clé et d’une valeur. Vous pouvez utiliser cette fonction pour transformer ou filtrer chaque paire clé/valeur telle qu’elle est analysée. Si vous fournissez une fonction replacer
, c’est votre valeur transformée ou filtrée pour chaque paire qui est renvoyée dans la fonction de sortie parse()
, et non la valeur d’analyse par défaut. Si la fonction replacer
renvoie undefined
pour toute paire, la propriété est supprimée du résultat final. Si la fonction replacer
est un tableau, il est utilisé comme filtre pour désigner les propriétés à inclure dans la sortie.
Lorsque l’argument transmis au paramètre replacer
n’est ni un tableau ni une fonction, ActionScript renvoie une exception TypeError avec l’ID d’erreur kJSONInvalidReplacer
. Il publie également un message d’erreur localisé.
Le paramètre space
facultatif est une chaîne ou nombre qui permet à l’espace blanc d’être inséré dans la chaîne renvoyée pour améliorer la lisibilité. Les entrées dans les objets JSON et les tableaux JSON générés sont séparées par un espace issu du paramètre space
. Cet espace comporte toujours entre 0 et 10 caractères. Si l’espace est une chaîne, l’espace dérivé correspond aux dix premiers caractères de cette chaîne. Si l’espace est un nombre non négatif x, l’espace correspond à x caractères d’espacement, jusqu’à un maximum de dix espaces. Lorsque l’argument transmis au paramètre space
n’est pas une chaîne, mais un nombre, il est converti en chaîne en vue d’être utilisé en tant qu’espace dans la sortie. L’exécution se poursuit.
Lorsque la méthode stringify()
rencontre une structure cyclique, elle renvoie une exception TypeError avec l’ID d’erreur kJSONCyclicStructure
. Il publie également un message d’erreur localisé.
Paramètres
value:Object — Valeur ActionScript à convertir en chaîne JSON
| |
replacer:* (default = null ) — (Facultatif) Fonction ou tableau qui transforme ou filtre les paires clé/valeur dans la sortie stringify
| |
space:* (default = null ) — (Facultatif) Chaîne ou numéro qui contrôle les espaces blancs ajoutés dans la chaîne renvoyée
|
String |
JSONExample
pour afficher un aller-retour JSON dans ActionScript. Cette opération s’accomplit de la façon suivante :
- Le constructeur de
JSONExample
attribue une chaîne au membretext
de la super classe et initialise un compteur interne. - De plus, la classe définit un tableau qui peut contenir des objets JSONExample ayant été exportés dans JSON.
- JSONExample définit également une méthode
toJSON()
et une méthoderevive()
. La méthodetoJSON()
est appelée parJSON.stringify()
pour sérialiser les objets JSONExample sur JSON. La méthoderevive()
peut être appelée à partir des méthodesJSON.parse()
pour restaurer l'objet JSONExample intégral. Cette restauration est réalisée à l'aide d'un ID donné pour récupérer l'objet d'origine à partir du tableau d'objets revivable. - Le script qui utilise la définition de classe crée un objet qui contient deux objets TextField et un objet JSONExample. Il crée également un tableau d'objets revivable pour le stockage d'objets TextField ayant été exportés dans JSON.
- La fonction
replacer
deJSON.stringify()
filtre les objets TextField hors de la chaîne JSON. A la place de chaque objet supprimé,replacer
fournit un repère avec un ID qui peut être utilisé ultérieurement pour extraire l'objet. D'autre part, les objets JSONExample passent à travers en fonction de leur codage natif JSON. - La fonction
reviver
de la méthodeparse()
recrée l'objet original en récupérant tous les objets TextField et JSONExample référencés.
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, 09:30 AM Z