Pacote | Nível superior |
Classe | public final class JSON |
Herança | JSON Object |
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3.0 |
Via de regra, a classe ActionScript JSON acata a especificação ECMA-262. As seguintes exceções ocorrem onde o ActionScript fornece maior flexibilidade que o ECMAScript:
-
Diferentemente do ECMAScript, a classe ActionScript JSON codifica os seguintes tipos de dados primitivos, bem como os objetos que os encapsulam:
Tipo primitivo Classe de encapsulador string String número Número boolean Booleano -
Método parse()
: Quando o argumento transmitido ao parâmetroreviver
não é uma função, o ActionScript lança um TypeError com o ID de errokJSONInvalidReviver
. Ele também posta uma mensagem de erro localizada. -
Método stringify ()
: Quando o argumento transmitido ao parâmetroreplacer
não é nem uma matriz nem uma função, o ActionScript lança um TypeError com o ID de errokJSONInvalidReplacer
. Ele também posta uma mensagem de erro localizada. -
Método stringify ()
: Quando o argumento transmitido ao parâmetrospace
não é uma string ou um número, é convertido em uma string. Esta string serve da lacuna na saída. O ECMA-262 requer a lacuna para ser uma string vazia. -
Método stringify ()
: Quando o código encontra uma estrutura cíclica, ele lança um TypeError com o ID de errokJSONCyclicStructure
. Ele também posta uma mensagem de erro localizada. -
O ECMA-262 especifica que a stringification JSON enumera as "próprias propriedades" de um objeto, indicando as propriedades dinâmicas do objeto. Como as classes do ActionScript também podem declarar propriedades corrigidas, o método
stringify ()
do ActionScript enumera tanto propriedades dinâmicas quanto propriedades não-transitórias públicas em objetos do ActionScript. Estas propriedades incluem propriedades acessadas por obtentores bem como propriedades acessadas diretamente.
Para a maior parte de classes do ActionScript, o método JSON.stringify ()
do ActionScript gera uma codificação padrão. As classes do ActionScript podem alterar essa codificação definindo um método toJSON ()
na classe ou no seu protótipo. Para algumas classes do ActionScript, a codificação padrão JSON é imprópria. Essas classes fornecem uma implementação trivial e substituível de toJSON ()
que retorna o valor descrito na seguinte tabela. Você pode substituir ou redefinir os métodos toJSON()
nestas classes se precisar de um comportamento específico. A tabela a seguir descreve essas exceções:
Classe | Comentários |
---|---|
ByteArray | O método toJSON () substituível retorna a string "ByteArray". |
Dictionary | O método toJSON () substituível retorna a string "Dictionary". |
Date | O método toJSON () substituível retorna Date.toString () . Esta exceção garante que o construtor ActionScript Date pode analisar a string JSON. |
XML | O método toJSON () substituível retorna a string "XML". |
Método | Definido por | ||
---|---|---|---|
Indica se um objeto tem uma propriedade especificada definida. | Object | ||
Indica se uma ocorrência da classe Object está na cadeia de protótipos do objeto especificado como o parâmetro. | Object | ||
[estático]
Aceita uma string com formato JSON e retorna um objeto do ActionScript que representa aquele valor. | JSON | ||
Indica se a propriedade especificada existe e é enumerável. | Object | ||
Define a disponibilidade de uma propriedade dinâmica para operações de repetição. | Object | ||
[estático]
Retorna uma string, no formato JSON, que representa um valor do ActionScript. | JSON | ||
Retorna a representação da string deste objeto, formatado segundo as convenções específicas para a localidade. | Object | ||
Retorna a representação de string do objeto especificado. | Object | ||
Retorna o valor primitivo do objeto especificado. | Object |
parse | () | método |
public static function parse(text:String, reviver:Function = null):Object
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3.0 |
Aceita uma string com formato JSON e retorna um objeto do ActionScript que representa aquele valor. Objetos JSON, matrizes, strings, números, números boolianos e mapa nulo para valores do ActionScript correspondentes, como mostrado abaixo:
Tipo de JSON | Tipo de ActionScript |
---|---|
array | Matriz |
string | String |
número | Número |
boolean | Booleano |
null | null |
O parâmetro reviver
é uma função que utiliza dois parâmetros: uma chave e um valor. Você pode usar esta função para transformar ou filtrar cada par de chave/valor à medida que é analisado. Se você fornece uma função reviver
, o seu valor transformado ou filtrado de cada par, em vez da análise padrão, é retornado na saída da função parse()
. Se a função reviver
retorna undefined
para qualquer par, a propriedade é excluída do resultado final.
Quando o argumento transmitido ao parâmetro reviver
não é uma função, o ActionScript lança um TypeError com o ID de erro kJSONInvalidReviver
. Ele também posta uma mensagem de erro localizada.
Se a função parse()
encontra chaves duplicadas de um objeto, a chave duplicada encontrada por último fornece o valor de todas as ocorrências precedentes daquela chave.
Parâmetros
text:String — A string JSON para ser analisadas
| |
reviver:Function (default = null ) — (Opcional) Uma função que transforma cada par de chave/valor que é analisado
|
Object |
stringify | () | método |
public static function stringify(value:Object, replacer:* = null, space:* = null):String
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3.0 |
Retorna uma string, no formato JSON, que representa um valor do ActionScript. O método stringify
pode utilizar três parâmetros.
O parâmetro value
é obrigatório. Este parâmetro é um valor do ActionScript. Normalmente, é um objeto ou matriz, mas também pode ser uma string, número booliano, número ou nulo.
O parâmetro opcional replacer
pode ser uma função ou uma matriz de strings ou números. Se for uma função, a função utiliza dois parâmetros: uma chave e um valor. Você pode usar esta função para transformar ou filtrar cada par de chave/valor à medida que é analisado. Se você fornece uma função replacer
, o seu valor transformado ou filtrado de cada par, em vez da análise padrão, é retornado na saída da função parse()
. Se a função replacer
retorna undefined
para qualquer par, a propriedade é excluída do resultado final. Se replacer
é uma matriz, ela é usada como um filtro para indicar que propriedades são incluídas na saída.
Quando o argumento transmitido ao parâmetro replacer
não é nem uma matriz nem uma função, o ActionScript lança um TypeError com o ID de errokJSONInvalidReplacer
. Ele também posta uma mensagem de erro localizada.
O parâmetro opcional space
é uma string ou número que permite que espaço em branco seja inserido na string retornada para melhorar a legibilidade humana. As entradas em objetos JSON gerados e matrizes JSON são separadas por uma lacuna derivada do parâmetro space
. Esta lacuna tem sempre de 0 a 10 caracteres de largura. Se o espaço for uma string, então a lacuna derivada corresponde aos dez primeiros caracteres daquela string. Se o espaço é um número não negativo x, então a lacuna corresponde a x caracteres de espaço, a um máximo de dez espaços. Quando o argumento transmitido ao parâmetro space
não é uma string nem número, é convertido em uma string para uso como a lacuna na saída. A execução então prossegue.
Quando o método stringify ()
encontra uma estrutura cíclica, lança um TypeError com o ID do erro kJSONCyclicStructure
. Ele também posta uma mensagem de erro localizada.
Parâmetros
value:Object — O valor do ActionScript a ser convertido em uma string JSON
| |
replacer:* (default = null ) — (Opcional) Uma função ou uma matriz que transforma ou filtra pares de chave/valor na saída stringify
| |
space:* (default = null ) — (Opcional) Uma string ou número que controla o espaço em branco adicionado à string retornada
|
String |
JSONExample
para mostrar um JSON completo no ActionScript. Isso é realizado com as seguintes etapas:
- O construtor de
JSONExample
atribui uma sequência de caracteres ao membro detexto
da superclasse e inicializa um contador interno. - Além disso, a classe define uma matriz que pode conter objetos JSONExample que foram exportados para JSON.
- JSONExample também define um método
toJSON()
e um métodorevive()
. O métodotoJSON ()
é chamado porJSON.stringify()
para serializar objetos JSONExample para JSON. O métodorevive ()
pode ser chamado de métodosJSON.parse()
para restaurar o objeto JSONExample completo. Esta restauração realiza-se usando um determinado ID para recuperar o objeto original da matriz de objetos revivescentes. - O script que usa a definição de classe cria um objeto que contém dois objetos TextField e um objeto JSONExample. Também cria uma matriz de objetos revivescentes para armazenar objetos TextField que foram exportados para JSON.
- A função
replacer
deJSON.stringify()
descarta os objetos TextField da sequência de caracteres JSON. No lugar de cada objeto removido, a funçãoreplacer
fornece um marcador com um ID que pode ser usado posteriormente para recuperar o objeto. Os objetos JSONExample, por outro lado, passam segundo a sua codificação JSON nativa. - A função
reviver
do métodoparse()
recria o objeto original recuperando todos os objetos JSONExample e TextField.
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:10 AM Z