Справочник по ActionScript® 3.0 для платформы Adobe® Flash®
Домашняя страница  |  Скрыть список пакетов и классов |  Пакеты  |  Классы  |  Что нового  |  Указатель  |  Приложения  |  Почему по-английски?
Фильтры: Получение данных с сервера...
Получение данных с сервера...
Верхний уровень 

JSON  - AS3

ПакетВерхний уровень
Классpublic final class JSON
НаследованиеJSON Inheritance Object

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3.0

Класс JSON позволяет приложениям импортировать и экспортировать данные с использованием формата JSON (JavaScript Object Notation). JSON — это отраслевой формат обмена данными, описание которого можно найти по адресу http://www.json.org.

Как правило, класс ActionScript JSON использует спецификацию ECMA-262. Исключение составляют следующие ситуации, где ActionScript предоставляет больше гибкости, чем ECMAScript.

  • В отличие от ECMAScript, класс ActionScript JSON кодирует следующие базисные типы данных, а так же их объекты-оболочки.

    Базисный типКласс-оболочка
    stringString
    numberNumber
    booleanBoolean
  • Метод parse(): когда аргумент, передаваемый параметру reviver, не является функцией, ActionScript выдает ошибку TypeError с кодом kJSONInvalidReviver. Кроме того, отображается локализованное сообщение об ошибке.

  • Метод stringify(): когда аргумент, передаваемый параметру replacer, не является массивом или функцией, ActionScript выдает ошибку TypeError с кодом kJSONInvalidReplacer. Кроме того, отображается локализованное сообщение об ошибке.

  • Метод stringify(): когда аргумент, передаваемый параметру space, не является объектом строкой или числом, он преобразуется в строку. Эта строка выполняет функцию зазора в выводе. Для ECMA-262 требуется, чтобы зазор был пустой строкой.

  • Метод stringify(): когда код обнаруживает циклическую структуру, выдается ошибка TypeError с кодом kJSONCyclicStructure. Кроме того, отображается локализованное сообщение об ошибке.

  • В соответствии со спецификацией ECMA-262 при преобразовании в строку JSON перечисляются «собственные свойства» объекта, то есть его динамические свойства. Поскольку классы ActionScript могут объявлять фиксированные свойства, метод ActionScript stringify() перечисляет и динамические свойства и общедоступные непереходные свойства объектов ActionScript. К таким свойствам относятся свойства, обращение к которым осуществляется через функции получения, а также непосредственно.

Для большинства классов ActionScript метод ActionScript JSON.stringify() генерирует кодировку по умолчанию. Классы ActionScript могут менять эту кодировку, определяя метод toJSON() в классе или его прототипе. Для некоторых классов ActionScript не подходит кодировка JSON по умолчанию. Эти классы обеспечивают простейшую переопределяемую реализацию toJSON(), при которой возвращается значение, описанное в следующей таблице. Для этих классов методы toJSON() можно переопределить, если требуется добиться конкретного поведения. В следующей таблице приведено описание этих исключений.

КлассКомментарии
ByteArrayПереопределяемый метод toJSON() возвращает строку ByteArray.
DictionaryПереопределяемый метод toJSON() возвращает строку Dictionary.
DateПереопределяемый метод toJSON() возвращает Date.toString(). Это исключение гарантирует, что конструктор даты ActionScript сможет проанализировать строку JSON.
XMLПереопределяемый метод toJSON() возвращает строку XML.

Посмотреть примеры



Общедоступные свойства
 СвойствоОпределено
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
Общедоступные методы
 МетодОпределено
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
  
parse(text:String, reviver:Function = null):Object
[статические] Принимает строку в формате JSON и возвращает объект ActionScript, который представляет это значение.
JSON
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
  
stringify(value:Object, replacer:* = null, space:* = null):String
[статические] Возвращает строку в формате JSON, которая представляет значение ActionScript.
JSON
 Inherited
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали.
Object
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
Сведения о методе

parse

()метод
public static function parse(text:String, reviver:Function = null):Object

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3.0

Принимает строку в формате JSON и возвращает объект ActionScript, который представляет это значение. Объекты JSON, массивы, строки, числа, логические и нулевые значения сопоставляются с соответствующими значениями ActionScript, как показано ниже.

Тип JSONТип ActionScript
arrayArray
stringString
numberNumber
booleanBoolean
nullnull

Параметр reviver является функцией, которая принимает два параметра: ключ и значение. Эту функцию можно использовать для преобразования или фильтрации пары «ключ/значение» в процессе анализа. Если используется функция reviver, то в выводе функции parse() возвращается преобразованное или отфильтрованное значение для каждой пары вместо выполнения анализа по умолчанию. Если функция reviver возвращает значение undefined для любой пары, свойство удаляется из окончательного результата.

Когда аргумент, передаваемый параметру reviver, не является функцией, ActionScript выдает ошибку TypeError с кодом kJSONInvalidReviver. Кроме того, отображается локализованное сообщение об ошибке.

Если функция parse() встречает в объекте повторяющиеся ключи, то значение последнего обнаруженного повторяющегося ключа используется для всех предшествующих вхождений.

Параметры

text:String — Строка JSON для анализа
 
reviver:Function (default = null) — (Необязательно) Функция, которая преобразует каждую анализируемую пару «ключ/значение».

Возвращает
Object

stringify

()метод 
public static function stringify(value:Object, replacer:* = null, space:* = null):String

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3.0

Возвращает строку в формате JSON, которая представляет значение ActionScript. Метод stringify может принимать три параметра.

Параметр value является обязательным. Этот параметр является значением ActionScript. Как правило, это объект или массив, но может также быть строковое, логическое, числовое или нулевое значение.

Необязательный параметр replacer может быть функцией или массивом строк или чисел. Если это функция, она принимает два параметра: ключ и значение. Эту функцию можно использовать для преобразования или фильтрации пары «ключ/значение» в процессе анализа. Если используется функция replacer, то в выводе функции parse() возвращается преобразованное или отфильтрованное значение для каждой пары вместо выполнения анализа по умолчанию. Если функция replacer возвращает значение undefined для любой пары, свойство удаляется из окончательного результата. Если replacer является массивом, он используется в качестве фильтра для определения свойств, которые включаются в вывод.

Когда аргумент, передаваемый параметру replacer, не является массивом или функцией, ActionScript выдает ошибку TypeError с кодом kJSONInvalidReplacer. Кроме того, отображается локализованное сообщение об ошибке.

Необязательный параметр space является строкой или числом, которое позволяет вставить пробел в возвращаемую строку, чтобы обеспечить удобочитаемость для пользователей. Записи в генерируемых объектах и массивах JSON разделяются зазором, полученным из параметра space. Ширина этого зазора всегда составляет от 0 до 10 символов. Если space является строкой, то полученный зазор является первыми десятью символами этой строки. Если space — неотрицательное число x, то зазор составляет x символов пробела (максимум 10). Когда аргумент, передаваемый параметру space, не является ни строкой, ни числом, он преобразуется в строку для использования в качестве зазора в выводе. После этого продолжается выполнение кода.

Когда метод stringify() обнаруживает циклическую структуру, выдается ошибка TypeError с кодом kJSONCyclicStructure. Кроме того, отображается локализованное сообщение об ошибке.

Параметры

value:Object — Значение ActionScript, которое будет преобразовано в строку JSON
 
replacer:* (default = null) — (Необязательно) Функция или массив, который преобразует или фильтрует пары «ключ/значение» в выводе stringify
 
space:* (default = null) — (Необязательно) Строка или число, управляющее добавленным пробелом в возвращенной строке

Возвращает
String
JSONExample.as

В следующем примере класс JSONExample используется для показа полного обхода JSON в ActionScript. Это можно сделать, выполнив следующие действия:
  1. Конструктор для JSONExample назначает строку элементу text суперкласса и инициализирует внутренний счетчик.
  2. Кроме того, этот класс определяет массив, который может содержать объекты JSONExample, экспортированные в JSON.
  3. JSONExample также определяет методы toJSON() и revive(). Метод toJSON() вызывается функцией JSON.stringify() для сериализации объектов JSONExample в JSON. Метод revive() можно вызвать из методов JSON.parse() для полного восстановления объекта JSONExample. Это восстановление возможно благодаря использованию указанного идентификатора для извлечения исходного объекта из восстанавливаемого массива объектов.
  4. Сценарий, в котором используется определение класса, создает объект, содержащий два объекта TextField и один объект JSONExample. Он также создает восстанавливаемый массив объектов для хранения объектов TextField, экспортированных в JSON.
  5. Функция replacer в JSON.stringify() выполняет фильтрацию объектов TextField в строке JSON. Вместо каждого удаленного объекта функция replacer предоставляет маркер с идентификатором, который можно использовать для последующего восстановления объекта. С другой стороны, объекты JSONExample передаются согласно их собственной кодировке JSON.
  6. Функция reviver метода parse() восстанавливает исходный объект путем извлечения всех ссылочных объектов TextField и JSONExample.
 
 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);
        }
}
               




[ X ]Почему по-английски?
Содержимое Справочника ActionScript 3.0 отображается на английском языке

Не все части Справочника ActionScript 3.0 переводятся на все языки. Если какой-то текстовый элемент не переведен, он отображается на английском языке. Например, компонент ga.controls.HelpBox не переведен ни на один из языков. Это значит, что в русской версии справки компонент ga.controls.HelpBox будет отображаться на английском языке.