패키지 | 최상위 레벨 |
클래스 | 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 숫자 Number 부울 Boolean -
parse()
메서드:reviver
매개 변수에 전달된 인수가 함수가 아니면 ActionScript에서 오류 IDkJSONInvalidReviver
와 함께 TypeError가 발생합니다. 또한 지역화된 오류 메시지가 게시됩니다. -
stringify()
메서드:replacer
매개 변수에 전달된 인수가 배열 또는 함수가 아니면 ActionScript에서 오류 IDkJSONInvalidReplacer
와 함께 TypeError가 발생합니다. 또한 지역화된 오류 메시지가 게시됩니다. -
stringify()
메서드:space
매개 변수에 전달된 인수가 String 또는 Number가 아니면 String으로 변환됩니다. 이 문자열은 출력의 간격 역할을 합니다. ECMA-262에서는 간격을 빈 문자열로 규정합니다. -
stringify()
메서드: 코드에서 순환 구조가 발견되면 오류 IDkJSONCyclicStructure
와 함께 TypeError가 발생합니다. 또한 지역화된 오류 메시지가 게시됩니다. -
ECMA-262에서는 JSON 문자열화 시 객체의 "자체 속성", 즉 객체의 동적 속성을 열거할 것을 규정합니다. ActionScript 클래스는 고정된 속성을 선언할 수도 있으므로, ActionScript
stringify()
메서드는 ActionScript 객체의 동적 속성과 공용 비임시 속성을 모두 열거합니다. 이러한 속성에는 getter로 액세스하는 속성 및 직접 액세스하는 속성이 포함됩니다.
대부분 ActionScript 클래스의 경우 ActionScript JSON.stringify()
메서드가 기본 인코딩을 생성합니다. ActionScript 클래스는 클래스나 프로토타입에서 toJSON()
메서드를 정의하여 이 인코딩을 변경할 수 있습니다. 일부 ActionScript 클래스의 경우 기본 JSON 인코딩이 적합하지 않습니다. 이러한 클래스는 다음 표에 명시된 값을 반환하는 간단하고 재정의 가능한 구현의 toJSON()
을 제공합니다. 특정 비헤이비어가 필요할 경우 이러한 클래스의 toJSON()
메서드를 재정의할 수 있습니다. 다음 표에서는 이러한 예외에 대해 설명합니다.
클래스 | 주석 |
---|---|
ByteArray | 재정의 가능한 toJSON() 메서드가 "ByteArray" 문자열을 반환합니다. |
Dictionary | 재정의 가능한 toJSON() 메서드가 "Dictionary" 문자열을 반환합니다. |
Date | 재정의 가능한 toJSON() 메서드가 Date.toString() 을 반환합니다. 이 예외는 ActionScript Date 생성자가 JSON 문자열을 파싱할 수 있도록 보장합니다. |
XML | 재정의 가능한 toJSON() 메서드가 "XML" 문자열을 반환합니다. |
메서드 | 정의 주체 | ||
---|---|---|---|
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
[정적]
JSON 형식의 String을 허용하며, 해당 값을 나타내는 ActionScript 객체를 반환합니다. | JSON | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
[정적]
ActionScript 값을 나타내는 JSON 형식의 String을 반환합니다. | 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 형식의 String을 허용하며, 해당 값을 나타내는 ActionScript 객체를 반환합니다. JSON 객체, 배열, 문자열, 숫자, 부울 및 null은 아래와 같이 해당 ActionScript 값에 매핑됩니다.
JSON 유형 | ActionScript 유형 |
---|---|
배열 | Array |
문자열 | String |
숫자 | Number |
부울 | Boolean |
null | null |
reviver
매개 변수는 키와 값의 두 매개 변수를 사용하는 함수입니다. 이 함수를 사용하여 각 키/값 쌍이 파싱될 때 해당 쌍을 변형하거나 필터링할 수 있습니다. reviver
함수를 제공하면 parse()
함수 출력에서 기본 파싱이 아닌 각 쌍의 변형 또는 필터링된 값이 반환됩니다. reviver
함수가 아무 쌍에 대해 undefined
를 반환하면 최종 결과에서 속성이 삭제됩니다.
reviver
매개 변수에 전달된 인수가 함수가 아니면 ActionScript에서 오류 ID kJSONInvalidReviver
와 함께 TypeError가 발생합니다. 또한 지역화된 오류 메시지가 게시됩니다.
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 |
ActionScript 값을 나타내는 JSON 형식의 String을 반환합니다. stringify
메서드는 세 개의 매개 변수를 사용합니다.
value
매개 변수는 필수 항목입니다. 이 매개 변수는 ActionScript 값입니다. 일반적으로 Object 또는 Array이지만 String, Boolean, Number 또는 null일 수도 있습니다.
선택 사항인 replacer
매개 변수는 함수이거나 문자열 또는 숫자 배열일 수 있습니다. 함수인 경우 이 함수는 키와 값의 두 매개 변수를 사용합니다. 이 함수를 사용하여 각 키/값 쌍이 파싱될 때 해당 쌍을 변형하거나 필터링할 수 있습니다. replacer
함수를 제공하면 parse()
함수 출력에서 기본 파싱이 아닌 각 쌍의 변형 또는 필터링된 값이 반환됩니다. replacer
함수가 아무 쌍에 대해 undefined
를 반환하면 최종 결과에서 속성이 삭제됩니다. replacer
가 배열이면 이 배열이 출력에 포함될 속성을 지정하는 필터로 사용됩니다.
replacer
매개 변수에 전달된 인수가 배열 또는 함수가 아니면 ActionScript에서 오류 ID kJSONInvalidReplacer
와 함께 TypeError가 발생합니다. 또한 지역화된 오류 메시지가 게시됩니다.
선택 사항인 space
매개 변수는 가독성을 높이기 위해 반환된 문자열에 공백을 삽입하는 String 또는 Number입니다. 생성된 JSON 객체와 JSON 배열은 space
매개 변수에서 도출한 간격으로 구분됩니다. 이 간격은 항상 0에서 10자 길이입니다. space가 문자열이면 해당 문자열의 처음 10개 문자로 간격이 도출됩니다. space가 음이 아닌 숫자 x이면 간격은 x개의 공백 문자이며, 최대 길이는 10자입니다. space
매개 변수에 전달된 인수가 String 또는 Number가 아니면 String으로 변환된 후 출력의 간격으로 사용됩니다. 실행 후 진행됩니다.
stringify()
메서드에서 순환 구조가 발견되면 오류 ID kJSONCyclicStructure
와 함께 TypeError가 발생합니다. 또한 지역화된 오류 메시지가 게시됩니다.
매개 변수
value:Object — JSON 문자열로 변환할 ActionScript 값
| |
replacer:* (default = null ) — (선택 사항) stringify 출력의 키/값 쌍을 변형하거나 필터링하는 함수 또는 배열
| |
space:* (default = null ) — (선택 사항) 반환된 String에 추가되는 공백을 제어하는 문자열 또는 숫자
|
String |
JSONExample
클래스를 사용하여 ActionScript에서 JSON 라운드 트립을 보여 줍니다. 이는 다음 단계로 이루어집니다.
JSONExample
의 생성자는 수퍼 클래스의text
멤버에 문자열을 할당하고 내부 카운터를 초기화합니다.- 또한 이 클래스는 JSON으로 내보낸 JSONExample 객체를 포함할 수 있는 배열을 정의합니다.
- JSONExample은
toJSON()
메서드와revive()
메서드를 정의하기도 합니다.toJSON()
메서드는 JSONExample 객체를 JSON과 직렬화하도록JSON.stringify()
를 통해 호출됩니다.revive()
메서드는 전체 JSONExample 객체를 복원하기 위해JSON.parse()
메서드에서 호출할 수 있습니다. 이러한 복원을 수행하려면 지정된 ID를 사용하여 다시 사용 가능한 객체 배열에서 원본 객체를 검색해야 합니다. - 클래스 정의를 사용하는 스크립트는 TextField 객체 두 개와 JSONExample 객체 하나를 포함하는 객체를 만듭니다. 또한 JSON으로 내보낸 TextField 객체를 저장하기 위해 다시 사용 가능한 객체 배열을 만듭니다.
JSON.stringify()
의replacer
함수는 JSON 문자열에서 TextField 객체를 필터링하여 제거합니다.replacer
는 제거된 각 객체 대신 나중에 객체를 검색하는 데 사용할 수 있는 ID를 표시자에 제공합니다. 반면, JSONExample 객체는 기본 JSON 인코딩에 따라 전달됩니다.parse()
메서드의reviver
함수는 참조된 모든 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, 03:17 PM Z