Пакет | Верхний уровень |
Класс | public final class JSON |
Наследование | JSON Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11, AIR 3.0 |
Как правило, класс ActionScript JSON использует спецификацию ECMA-262. Исключение составляют следующие ситуации, где ActionScript предоставляет больше гибкости, чем ECMAScript.
-
В отличие от ECMAScript, класс ActionScript JSON кодирует следующие базисные типы данных, а так же их объекты-оболочки.
Базисный тип Класс-оболочка string String number Number boolean Boolean -
Метод
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. |
Метод | Определено | ||
---|---|---|---|
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
[статические]
Принимает строку в формате JSON и возвращает объект ActionScript, который представляет это значение. | JSON | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
[статические]
Возвращает строку в формате JSON, которая представляет значение ActionScript. | JSON | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Возвращает элементарное значение заданного объекта. | 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 |
---|---|
array | Array |
string | String |
number | Number |
boolean | Boolean |
null | null |
Параметр 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
используется для показа полного обхода JSON в ActionScript. Это можно сделать, выполнив следующие действия:
- Конструктор для
JSONExample
назначает строку элементуtext
суперкласса и инициализирует внутренний счетчик. - Кроме того, этот класс определяет массив, который может содержать объекты JSONExample, экспортированные в JSON.
- JSONExample также определяет методы
toJSON()
иrevive()
. МетодtoJSON()
вызывается функциейJSON.stringify()
для сериализации объектов JSONExample в JSON. Методrevive()
можно вызвать из методовJSON.parse()
для полного восстановления объекта JSONExample. Это восстановление возможно благодаря использованию указанного идентификатора для извлечения исходного объекта из восстанавливаемого массива объектов. - Сценарий, в котором используется определение класса, создает объект, содержащий два объекта TextField и один объект JSONExample. Он также создает восстанавливаемый массив объектов для хранения объектов TextField, экспортированных в JSON.
- Функция
replacer
вJSON.stringify()
выполняет фильтрацию объектов TextField в строке JSON. Вместо каждого удаленного объекта функцияreplacer
предоставляет маркер с идентификатором, который можно использовать для последующего восстановления объекта. С другой стороны, объекты JSONExample передаются согласно их собственной кодировке JSON. - Функция
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); } }
Tue Jun 12 2018, 11:34 AM Z