Paquete | Nivel superior |
Clase | public final class JSON |
Herencia | JSON Object |
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3.0 |
Como regla, la clase JSON de ActionScript se adhiere a la especificación ECMA-262. Las siguientes excepciones se producen cuando ActionScript proporciona mayor flexibilidad que ECMAScript:
-
Al contrario de lo que sucede con ECMAScript, la clase JSON de ActionScript codifica los siguientes tipos de datos primitivos, así como los objetos que los engloban:
Tipo simple Clase agrupada string String number Number boolean Boolean -
Método
parse()
: si el argumento transferido al parámetroreviver
no es una función, ActionScript emite un TypeError con ID de errorkJSONInvalidReviver
. También envía un mensaje de error localizado. -
Método
stringify()
: si el argumento transferido al parámetroreplacer
no es un conjunto ni una función, ActionScript emite un TypeError con ID de errorkJSONInvalidReplacer
. También envía un mensaje de error localizado. -
Método
stringify()
: si el argumento transferido al parámetrospace
no es String ni Number, se convierte a String. Esta cadena actúa como el hueco en la salida. ECMA-262 Requiere el hueco para ser una cadena vacía. -
Método
stringify()
: si el código se encuentra una estructura cíclica, emite un TypeError con ID de errorkJSONCyclicStructure
. También envía un mensaje de error localizado. -
ECMA-262 especifica que las cadenas JSON enumeran las “propias propiedades” de un objeto, es decir, las propiedades dinámicas del objeto. Debido a que las clases de ActionScript pueden declarar también propiedades fijas, el método
stringify()
de ActionScript enumera propiedades tanto dinámicas como públicas no transitorias en objetos de ActionScript. Entre estas propiedades se incluyen propiedades a las que acceden captadores así como las propiedades a las que se accede directamente.
Para la mayoría clases de ActionScript, el método JSON.stringify()
de ActionScript genera una codificación predeterminada. Las clases de ActionScript pueden cambiar esta codificación definiendo un método toJSON()
de la clase o su prototipo. Para unas pocas clases de ActionScript, el valor predeterminado de codificación JSON es inadecuado. Estas clases contienen una implementación trivial y anulable de toJSON()
que devuelve el valor descrito en la siguiente tabla. Se pueden reemplazar o redefinir los métodos toJSON()
de estas clases si se necesita un comportamiento específico. En la tabla siguiente se describen estas excepciones:
Clase | Comentarios |
---|---|
ByteArray | El método toJSON() reemplazable devuelve la cadena "ByteArray". |
Dictionary | El método toJSON() reemplazable devuelve la cadena "Dictionary". |
Date | El método toJSON() reemplazable devuelve Date.toString() . Esta excepción garantiza que el constructor Date de ActionScript puede analizar la cadena JSON. |
XML | El método toJSON() reemplazable devuelve la cadena "XML". |
Método | Definido por | ||
---|---|---|---|
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
[estática]
Acepta una cadena con formato JSON y devuelve un objeto de ActionScript que representa ese valor. | JSON | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
[estática]
Devuelve una cadena, en formato JSON, que representa un valor de ActionScript. | JSON | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
Devuelve la representación de cadena del objeto especificado. | Object | ||
Devuelve el valor simple del objeto especificado. | Object |
parse | () | método |
public static function parse(text:String, reviver:Function = null):Object
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3.0 |
Acepta una cadena con formato JSON y devuelve un objeto de ActionScript que representa ese valor. Los objetos JSON, los conjuntos, las cadenas, los números, los Boolean y null se asignan a los valores correspondientes de ActionScript, tal como se muestra a continuación:
Tipo de JSON | Tipo de ActionScript |
---|---|
array | Array |
string | String |
number | Number |
boolean | Boolean |
null | null |
El parámetro reviver
es una función que acepta dos parámetros: una clave y un valor. Esta función se puede utilizar para transformar o filtrar cada par clave/valor a medida que se analiza. Si se proporciona una función reviver
, su valor transformado o filtrado para cada par, y no el análisis predeterminado, se devuelve en la salida de la función parse()
. Si la función reviver
devuelve undefined
para cualquier par, la propiedad se elimina del resultado final.
Si el argumento transferido al parámetro reviver
no es una función, ActionScript emite un TypeError con ID de error kJSONInvalidReviver
. También envía un mensaje de error localizado.
Si la función parse()
encuentra claves duplicadas dentro de un objeto, la clave duplicada encontrada en último lugar proporciona el valor anterior para todos las apariciones de dicha clave.
Parámetros
text:String — La cadena JSON que se va a analizar
| |
reviver:Function (default = null ) — (Opcional) Una función que se adapta a cada par clave/valor que se analiza
|
Object |
stringify | () | método |
public static function stringify(value:Object, replacer:* = null, space:* = null):String
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3.0 |
Devuelve una cadena, en formato JSON, que representa un valor de ActionScript. El método stringify()
puede adoptar tres parámetros.
Se requiere el parámetro value
. Este parámetro es un valor de ActionScript. Por lo general, es Object o Array, pero también puede ser String, Boolean, Number, o null.
El parámetro opcional replacer
puede ser una función o un conjunto de cadenas o números. Si es una función, la función toma dos parámetros: una clave y un valor. Esta función se puede utilizar para transformar o filtrar cada par clave/valor a medida que se analiza. Si se proporciona una función replacer
, su valor transformado o filtrado para cada par, y no el análisis predeterminado, se devuelve en la salida de la función parse()
. Si la función replacer
devuelve undefined
para cualquier par, la propiedad se elimina del resultado final. Si replacer
es un conjunto, se utiliza como un filtro para designar las propiedades que se incluyen en la salida.
Si el argumento transferido al parámetro replacer
no es un conjunto ni una función, ActionScript emite un TypeError con ID de error kJSONInvalidReplacer
. También envía un mensaje de error localizado.
El parámetro opcional space
es una cadena o número que permite inyectar espacios en blanco en la cadena devuelta para mejorar la legibilidad. Las entradas de los objetos JSON y conjuntos JSON generados están separados por un hueco derivado del parámetro space
. Este hueco siempre tiene entre 0 y 10 caracteres de ancho. Si el espacio es una cadena, el hueco derivado son los primeros diez caracteres de esa cadena. Si el espacio es un número no negativo x, el hueco es x caracteres de espacio, hasta un máximo de diez espacios. Cuando el argumento transferido al parámetro space
no es una cadena ni un número, se convierte en una cadena para utilizarla como el hueco de la salida. A continuación, la ejecución continúa.
Cuando el método stringify()
encuentra una estructura cíclica, emite un TypeError con ID de error kJSONCyclicStructure
. También envía un mensaje de error localizado.
Parámetros
value:Object — El valor de ActionScript que se va a convertir en una cadena JSON
| |
replacer:* (default = null ) — (Opcional) Una función o un conjunto que se adapta o filtra pares clave/valor en la salida de stringify
| |
space:* (default = null ) — (Opcional) Una cadena o número que controla los espacios en blanco añadidos en la cadena devuelta
|
String |
JSONExample
para mostrar un recorrido JSON de ida y vuelta en ActionScript. Esto se consigue con los pasos siguientes:
- El constructor para
JSONExample
asigna una cadena al miembrotext
de la superclase e inicializa un contador interno. - Además, la clase define un conjunto que puede contener objetos JSONExample que se han exportado a JSON.
- JSONExample también define un método
toJSON()
y un métodorevive()
. Se llama al métodotoJSON()
medianteJSON.stringify()
para serializar objetos JSONExample en JSON. El métodorevive()
se puede llamar desde métodosJSON.parse()
para restaurar el objeto JSONExample completo. Esta restauración se logra utilizando un identificador determinado para recuperar el objeto original desde el conjunto de objetos recuperables. - La secuencia de comandos que utiliza la definición de la clase crea un objeto que contiene dos objetos TextField y un objeto JSONExample. También se crea un conjunto de objetos para almacenar objetos TextField que se han exportado a JSON.
- La función
replacer
deJSON.stringify()
filtra los objetos TextField en la cadena JSON. En lugar de cada objeto eliminado,replacer
proporciona un marcador con un identificador que se puede utilizar más adelante para recuperar el objeto. Los objetos JSONExample, por su parte, se transfieren según su codificación nativa de JSON. - La función
reviver
del métodoparse()
vuelve a crear el objeto original recuperando todos los objetos TextField y JSONExample a los que hace referencia.
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:12 PM Z