Pacchetto | Primo livello |
Classe | public final class JSON |
Ereditarietà | JSON Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3.0 |
Di norma, la classe ActionScript JSON è conforme alla specifica ECMA-262, fatta eccezione per i casi seguenti in cui ActionScript offre maggiore flessibilità rispetto a ECMAScript:
-
A differenza di ECMAScript, la classe ActionScript JSON codifica i seguenti tipi di dati di base, nonché gli oggetti che li racchiudono:
Tipo di base Classe wrapper string String number Number boolean Boolean -
Metodo
parse()
: quando l'argomento passato al parametroreviver
non è una funzione, ActionScript genera un TypeError con l'ID errorekJSONInvalidReviver
. Inserisce inoltre un messaggio di errore localizzato. -
Metodo
stringify()
: quando l'argomento passato al parametroreplacer
non è un array né una funzione, ActionScript genera un TypeError con l'ID errorekJSONInvalidReplacer
. Inserisce inoltre un messaggio di errore localizzato. -
Metodo
stringify()
: quando l'argomento passato al parametrospace
non è un tipo String o Number, viene convertito in una stringa. Questa stringa viene utilizzata come gap nell'output. Secondo la specifica ECMA-262, il gap deve essere una stringa vuota. -
Metodo
stringify()
: quando il codice rileva una struttura ciclica, genera un TypeError con ID errorekJSONCyclicStructure
. Inserisce inoltre un messaggio di errore localizzato. -
Secondo la specifica ECMA-262, la conversione in stringa tramite JSON enumera le "proprietà specifiche" di un oggetto, ovvero le relative proprietà dinamiche. Poiché le classi ActionScript possono anche dichiarare proprietà fisse, il metodo ActionScript
stringify()
enumera sia le proprietà dinamiche sia le proprietà pubbliche persistenti dell'oggetto ActionScript. Sono incluse le proprietà a cui si accede tramite le funzioni getter, nonché quelle a cui si accede direttamente.
Per la maggior parte delle classi ActionScript, il metodo ActionScript JSON.stringify()
genera una codifica predefinita. Le classi ActionScript sono in grado di modificare tale codifica mediante la definizione di un metodo toJSON()
nella classe o nel suo prototipo. Per un numero limitato di classi ActionScript, la codifica JSON predefinita è inappropriata. Tali classi forniscono un'implementazione molto semplice e sostituibile di toJSON()
che restituisce il valore descritto nella tabella seguente. Se dovete ottenere un comportamento particolare, potete sostituire o ridefinire i metodi toJSON()
in queste classi. Nella tabella seguente sono descritte tali eccezioni:
Classe | Commenti |
---|---|
ByteArray | Metodo toJSON() sostituibile che restituisce la stringa "ByteArray". |
Dictionary | Metodo toJSON() sostituibile che restituisce la stringa "Dictionary". |
Date | Metodo toJSON() sostituibile che restituisce Date.toString() . Questa eccezione assicura che la funzione di costruzione Date ActionScript sia in grado di analizzare la stringa JSON. |
XML | Metodo toJSON() sostituibile che restituisce la stringa "XML". |
Altri esempi
Definizione di toJSON() sul prototipo di una classe integrata
Definizione o override di toJSON() a livello di classe
Uso del parametro replacer di JSON.stringify()
Uso del parametro reviver di JSON.parse()
Esempio di analisi
Altre informazioni
Metodo | Definito da | ||
---|---|---|---|
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
[statico]
Accetta una stringa in formato JSON e restituisce un oggetto ActionScript che rappresenta tale valore. | JSON | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
[statico]
Restituisce una stringa, in formato JSON, che rappresenta un valore ActionScript. | JSON | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
Restituisce la rappresentazione in formato stringa dell'oggetto specificato. | Object | ||
Restituisce il valore di base dell'oggetto specificato. | Object |
parse | () | metodo |
public static function parse(text:String, reviver:Function = null):Object
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3.0 |
Accetta una stringa in formato JSON e restituisce un oggetto ActionScript che rappresenta tale valore. Oggetti, array, stringhe, numeri, valori booleani e valori null JSON vengono associati ai valori ActionScript corrispondenti, come illustrato di seguito:
Tipo JSON | Tipo ActionScript |
---|---|
array | Array |
string | String |
number | Number |
boolean | Boolean |
null | null |
Il parametro reviver
è una funzione che accetta due parametri: una chiave e un valore. Potete utilizzare questa funzione per trasformare o filtrare ogni coppia chiave/valore quando viene analizzata. Se specificate una funzione reviver
, nell'output della funzione parse()
viene restituito il valore trasformato o filtrato per ogni coppia, anziché l'analisi predefinita. Se la funzione reviver
restituisce undefined
per una coppia, la proprietà viene eliminata dal risultato finale.
Quando l'argomento passato al parametro reviver
non è una funzione, ActionScript genera un TypeError con l'ID errore kJSONInvalidReviver
. Inserisce inoltre un messaggio di errore localizzato.
Se la funzione parse()
rileva chiavi duplicate all'interno di un oggetto, la chiave duplicata rilevata per ultima fornisce il valore per tutte le occorrenze precedenti di tale chiave.
Parametri
text:String — La stringa JSON da analizzare
| |
reviver:Function (default = null ) — (Opzionale) Una funzione che trasforma ogni coppia chiave/valore analizzata
|
Object |
stringify | () | metodo |
public static function stringify(value:Object, replacer:* = null, space:* = null):String
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3.0 |
Restituisce una stringa, in formato JSON, che rappresenta un valore ActionScript. Il metodo stringify
può accettare tre parametri.
Il parametro value
è obbligatorio. Questo parametro è un valore ActionScript. In genere, si tratta di un oggetto o un array, ma può anche essere una stringa, un valore booleano, un numero o un valore null.
Il parametro opzionale replacer
può essere una funzione o un array di stringhe o numeri. Se si tratta di una funzione, questa accetta due parametri: una chiave e un valore. Potete utilizzare questa funzione per trasformare o filtrare ogni coppia chiave/valore quando viene analizzata. Se specificate una funzione replacer
, nell'output della funzione parse()
viene restituito il valore trasformato o filtrato per ogni coppia, anziché l'analisi predefinita. Se la funzione replacer
restituisce undefined
per una coppia, la proprietà viene eliminata dal risultato finale. Se replacer
è un array, viene utilizzato come filtro per definire quali proprietà saranno incluse nell'output.
Quando l'argomento passato al parametro replacer
non è un array o una funzione, ActionScript genera un TypeError con l'ID errore kJSONInvalidReplacer
. Inserisce inoltre un messaggio di errore localizzato.
Il parametro opzionale space
è una stringa o un numero che consente l'inserimento di uno spazio vuoto nella stringa restituita per migliorare la leggibilità. Le voci negli oggetti e negli array JSON generati sono separate da un gap derivato dal parametro space
. La larghezza di questo gap è sempre compresa tra 0 e 10 caratteri. Se lo spazio è una stringa, il gap derivato corrisponde ai primi dieci caratteri di tale stringa. Se lo spazio è un numero x non negativo, il gap è uno spazio di x caratteri, fino a un massimo di dieci spazi. Quando l'argomento passato al parametro space
non è una stringa o un numero, viene convertito in una stringa che sarà utilizzata come gap nell'output. Procede dopo l'esecuzione.
Quando il metodo stringify()
rileva una struttura ciclica, genera un TypeError con ID errore kJSONCyclicStructure
. Inserisce inoltre un messaggio di errore localizzato.
Parametri
value:Object — Il valore ActionScript da convertire in una stringa JSON
| |
replacer:* (default = null ) — (Opzionale) Una funzione o un array che trasforma o filtra coppie di chiavi/valori nell'output stringify
| |
space:* (default = null ) — (Opzionale) Una stringa o un numero che controlla gli spazi vuoti aggiunti nella stringa restituita
|
String |
JSONExample
per visualizzare un round-trip JSON in ActionScript. Questa operazione viene eseguita mediante la procedura seguente:
- La funzione di costruzione di
JSONExample
assegna una stringa al membrotext
della superclasse e inizializza un contatore interno. - Inoltre, la classe definisce un array che può contenere oggetti JSONExample che sono stati esportati in JSON.
- JSONExample definisce anche un metodo
toJSON()
e un metodorevive()
. Il metodotoJSON()
viene chiamato daJSON.stringify()
per serializzare gli oggetti JSONExample su JSON. Il metodorevive()
può essere chiamato dai metodiJSON.parse()
per ripristinare l'oggetto JSONExample completo. Questo ripristino viene ottenuto utilizzando un determinato ID per recuperare l'oggetto originale dall'array di oggetti revivable. - Lo script che usa la definizione di classe crea un oggetto che contiene due oggetti TextField e un oggetto JSONExample. Inoltre, crea un array di oggetti revivable per la memorizzazione degli oggetti TextField che sono stati esportati in JSON.
- La funzione
replacer
diJSON.stringify()
filtra gli oggetti TextField dalla stringa JSON. Al posto di ogni oggetto rimosso,replacer
fornisce un marcatore con un ID che può essere usato in seguito per recuperare l'oggetto. Gli oggetti JSONExample, al contrario, vengono passati in base alla loro codifica JSON nativa. - La funzione
reviver
del metodoparse()
ricrea l'oggetto originale recuperando tutti gli oggetti TextField e JSONExample con riferimenti.
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, 02:44 PM Z