Pakiet | Najwyższy poziom |
Klasa | public final class JSON |
Dziedziczenie | JSON Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3.0 |
Klasa JSON języka ActionScript zasadniczo jest zgodna ze specyfikacją ECMA-262. W poniższych sytuacjach język ActionScript wyjątkowo charakteryzuje się większą elastycznością niż język ECMAScript:
-
W odróżnieniu od języka ECMAScript klasa JSON języka ActionScript koduje następujące podstawowe typy danych oraz obiekty, które stanowią opakowania tych danych:
Typ pierwotny Klasa opakowania string String number Number boolean Boolean -
Metoda
parse()
: Jeśli argument przekazany do parametrureviver
nie jest funkcją, kod ActionScript generuje wyjątek TypeError z identyfikatorem błędukJSONInvalidReviver
. Jest również publikowany zlokalizowany komunikat o błędzie. -
Metoda
stringify()
: Jeśli argument przekazany do parametrureplacer
nie jest ani tablicą, ani funkcją, kod ActionScript generuje wyjątek TypeError z identyfikatorem błędukJSONInvalidReplacer
. Jest również publikowany zlokalizowany komunikat o błędzie. -
Metoda
stringify()
: Jeśli argument przekazany do parametruspace
nie jest ciągiem ani liczbą, jest konwertowany na ciąg. Ciąg ten służy następnie jako odstęp w danych wyjściowych. Specyfikacja ECMA-262 wymaga, aby odstęp był pustym ciągiem. -
Metoda
stringify()
: Jeśli kod napotka strukturę cykliczną, generuje wyjątek TypeError z identyfikatorem błędukJSONCyclicStructure
. Jest również publikowany zlokalizowany komunikat o błędzie. -
Według specyfikacji ECMA-262 podczas konwersji na ciąg JSON zostają wyliczone „własne” — dynamiczne — właściwości obiektu. Klasy języka ActionScript umożliwiają również deklarowanie właściwości ustalonych, dlatego metoda
stringify()
języka ActionScript wylicza zarówno dynamiczne, jak i publiczne ustalone właściwości obiektów ActionScript. Należą do nich właściwości, do których dostęp odbywa się za pośrednictwem metod pobierających, a także właściwości, do których dostęp odbywa się w sposób bezpośredni.
Dla większości klas języka ActionScript metoda JSON.stringify()
języka ActionScript generuje kodowanie domyślne. Klasy ActionScript mogą zmieniać to kodowanie, definiując metodę toJSON()
danej klasy lub jej prototypu. W przypadku kilku klas języka ActionScript domyślne kodowanie JSON jest nieodpowiednie. Klasy te zapewniają prostą, możliwą do przesłonięcia implementację metody toJSON()
, która zwraca wartości opisane w poniższej tabeli. Jeśli wymagane jest określone zachowanie, można przesłaniać lub ponownie definiować metody toJSON()
tych klas. Poniższa tabela zawiera opisy przypadków wyjątkowych:
Klasa | Komentarze |
---|---|
ByteArray | Metoda toJSON() , którą można przesłaniać, zwraca ciąg „ByteArray”. |
Dictionary | Metoda toJSON() , którą można przesłaniać, zwraca ciąg „Dictionary”. |
Date | Metoda toJSON() , którą można przesłaniać, zwraca metodę Date.toString() . Ten wyjątek gwarantuje, że konstruktor klasy Date języka ActionScript może zanalizować ciąg JSON. |
XML | Metoda toJSON() , którą można przesłaniać, zwraca ciąg „XML”. |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
[statyczny]
Przyjmuje ciąg w formacie JSON i zwraca obiekt ActionScript reprezentujący wprowadzoną wartość. | JSON | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
[statyczny]
Zwraca ciąg w formacie JSON reprezentujący wartość ActionScript. | JSON | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg reprezentujący określony obiekt. | Object | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object |
parse | () | metoda |
public static function parse(text:String, reviver:Function = null):Object
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3.0 |
Przyjmuje ciąg w formacie JSON i zwraca obiekt ActionScript reprezentujący wprowadzoną wartość. Obiekty, tablice, ciągi, liczby, operatory logiczne i odwzorowania wartości null w formacie JSON odpowiadające wartościom ActionScript przedstawiono poniżej:
Typ JSON | Typ ActionScript |
---|---|
array | Array |
string | String |
number | Number |
boolean | Boolean |
null | null |
Parametr reviver
jest funkcją, która pobiera dwa parametry: klucz i wartość. Funkcji tej można używać do przekształcania lub filtrowania każdej pary klucz-wartość podczas jej analizowania. Zastosowanie funkcji reviver
powoduje, że funkcja parse()
zwraca przekształconą lub przefiltrowaną wartość dla każdej pary zamiast domyślnego produktu analizy. Jeżeli funkcja reviver
zwraca właściwość undefined
dla dowolnej z par, właściwość ta jest usuwana z wyniku końcowego.
Jeśli argument przekazany do parametru reviver
nie jest funkcją, kod ActionScript generuje wyjątek TypeError z identyfikatorem błędu kJSONInvalidReviver
. Jest również publikowany zlokalizowany komunikat o błędzie.
Jeśli funkcja parse()
napotka klucz powielony w obrębie obiektu, wartość dla wszystkich wystąpień klucza zostanie określona na podstawie ostatniego napotkanego wystąpienia klucza.
Parametry
text:String — Ciąg JSON, który ma zostać przeanalizowany.
| |
reviver:Function (default = null ) — (Opcjonalnie) Funkcja, która przekształca każdą analizowaną parę klucz-wartość.
|
Object |
stringify | () | metoda |
public static function stringify(value:Object, replacer:* = null, space:* = null):String
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3.0 |
Zwraca ciąg w formacie JSON reprezentujący wartość ActionScript. Metoda stringify
może pobierać trzy parametry.
Parametr value
jest wymagany. Ten parametr to wartość ActionScript. Zwykle jest to obiekt lub tablica, ale może to być również ciąg, operator logiczny, liczba lub wartość null.
Opcjonalny parametr replacer
może być funkcją lub tablicą ciągów albo liczb. Jeśli jest funkcją, pobiera ona dwa parametry: klucz i wartość. Funkcji tej można używać do przekształcania lub filtrowania każdej pary klucz-wartość podczas jej analizowania. Zastosowanie funkcji replacer
powoduje, że funkcja parse()
zwraca przekształconą lub przefiltrowaną wartość dla każdej pary zamiast domyślnego produktu analizy. Jeżeli funkcja replacer
zwraca właściwość undefined
dla dowolnej z par, właściwość ta jest usuwana z wyniku końcowego. Jeśli funkcja replacer
jest tablicą, jest używana jako filtr do określania, które właściwości są uwzględniane w danych wyjściowych.
Jeśli argument przekazany do parametru replacer
nie jest ani tablicą ani funkcją, kod ActionScript generuje wyjątek TypeError z identyfikatorem błędu kJSONInvalidReplacer
. Jest również publikowany zlokalizowany komunikat o błędzie.
Opcjonalny parametr space
jest ciągiem lub liczbą i umożliwia wstawienie odstępu do zwracanego ciągu w celu zwiększenia jego czytelności dla użytkownika. Wpisy w wygenerowanych obiektach JSON i tablicach JSON są oddzielone odstępem określanym przez parametr space
. Wielkość tego odstępu przyjmuje zawsze wartość z przedziału od 0 do 10 znaków. Jeśli parametr space jest ciągiem, określany przez niego odstęp składa się z pierwszych dziesięciu znaków tego ciągu. Jeśli parametr space jest liczbą nieujemną x, odstęp składa się z x (ale maksymalnie dziesięciu) znaków spacji. Jeśli argument przekazany do parametru space
nie jest ani ciągiem, ani liczbą, jest konwertowany na ciąg i używany jako odstęp w danych wyjściowych. Następnie wykonywanie kodu jest kontynuowane.
Jeśli metoda stringify()
napotka strukturę cykliczną, generuje wyjątek TypeError z identyfikatorem błędu kJSONCyclicStructure
. Jest również publikowany zlokalizowany komunikat o błędzie.
Parametry
value:Object — Wartość ActionScript, która ma zostać przekonwertowana na ciąg JSON.
| |
replacer:* (default = null ) — (Opcjonalnie) Funkcja lub tablica, która przekształca lub filtruje pary klucz-wartość zwrócone przez metodę stringify .
| |
space:* (default = null ) — (Opcjonalnie) Ciąg lub liczba. Określa znaki odstępu dodawane w zwracanym ciągu.
|
String |
JSONExample
wyświetlany jest przepływ operacji JSON w języku ActionScript. Proces przebiega w następujący sposób:
- Kontruktor klasy
JSONExample
przypisuje ciąg do elementutext
klasy nadrzędnej i inicjuje licznik wewnętrzny. - Oprócz tego klasa ta definiuje tablicę, która może zawierać obiekty JSONExample wyeksportowane do formatu JSON.
- Klasa JSONExample definiuje także metody
toJSON()
irevive()
. W metodzieJSON.stringify()
metodatoJSON()
jest wywoływana w celu przeprowadzenia serializacji obiektów JSONExample do formatu JSON. Metodarevive()
może być wywoływana w metodachJSON.parse()
w celu przywrócenia pełnego obiektu JSONExample. To przywrócenie jest realizowane przy użyciu określonego identyfikatora, który pozwala pobrać oryginalny obiekt z tablicy obiektów możliwych do przywrócenia. - Skrypt używający definicji klasy tworzy obiekt zawierający dwa obiekty TextField i jeden obiekt JSONExample. Tworzy również tablicę obiektów możliwych do przywrócenia, w której są przechowywane obiekty TextField wyeksportowane do formatu JSON.
- Funkcja
replacer
metodyJSON.stringify()
odfiltrowuje obiekty TextField z ciągu JSON. W miejsce każdego usuniętego obiektu funkcjareplacer
wstawia znacznik z identyfikatorem pozwalającym przywrócić obiekt w przyszłości. Obiekty JSONExample przechodzą przez filtr zgodnie z ich natywnym kodowaniem JSON. - Funkcja
reviver
metodyparse()
odtwarza pierwotny obiekt przez przywrócenie wszystkich obiektów TextField i JSONExample, do których istnieją odniesienia.
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, 12:06 PM Z