=================================
=================================
=================================
출처: http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/JSON.html
응용 프로그램은 JSON 클래스를 사용하여 JSON(JavaScript Object Notation) 형식으로 데이터를 가져오고 내보낼 수 있습니다. JSON은 업계 표준 데이터 교환 형식이며, 자세한 내용은 http://www.json.org를 참조하십시오.
원칙적으로 ActionScript JSON 클래스는 ECMA-262 사양을 준수합니다. ActionScript가 ECMAScript보다 더욱 큰 유연성을 제공하는 경우 다음과 같은 예외가 발생합니다.
- ECMAScript와 달리 ActionScript JSON 클래스는 다음과 같은 프리미티브 데이터 유형 및 이러한 유형을 래핑하는 객체를 인코딩합니다.프리미티브 유형래퍼 클래스
문자열 String 숫자 Number 부울 Boolean - parse() 메서드: reviver 매개 변수에 전달된 인수가 함수가 아니면 ActionScript에서 오류 ID kJSONInvalidReviver와 함께 TypeError가 발생합니다. 또한 지역화된 오류 메시지가 게시됩니다.
- stringify() 메서드: replacer 매개 변수에 전달된 인수가 배열 또는 함수가 아니면 ActionScript에서 오류 ID kJSONInvalidReplacer와 함께 TypeError가 발생합니다. 또한 지역화된 오류 메시지가 게시됩니다.
- stringify() 메서드: space 매개 변수에 전달된 인수가 String 또는 Number가 아니면 String으로 변환됩니다. 이 문자열은 출력의 간격 역할을 합니다. ECMA-262에서는 간격을 빈 문자열로 규정합니다.
- stringify() 메서드: 코드에서 순환 구조가 발견되면 오류 ID kJSONCyclicStructure와 함께 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" 문자열을 반환합니다. |
기타 예제
사용자 정의 JSON 비헤이비어 정의
기본 제공 클래스의 프로토타입에서 toJSON() 정의
클래스 수준에서 toJSON() 정의 또는 재정의
JSON.stringify() replacer 매개 변수 사용
JSON.parse() reviver 매개 변수 사용
파싱 예
추가 정보
공용 속성
공용 메서드
메서드정의 주체
hasOwnProperty(name:String):Boolean 지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. |
Object |
isPrototypeOf(theClass:Object):Boolean Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. |
Object |
parse(text:String, reviver:Function = null):Object [정적] JSON 형식의 String을 허용하며, 해당 값을 나타내는 ActionScript 객체를 반환합니다. |
JSON |
propertyIsEnumerable(name:String):Boolean 지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. |
Object |
setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void 루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. |
Object |
stringify(value:Object, replacer:* = null, space:* = null):String [정적] ActionScript 값을 나타내는 JSON 형식의 String을 반환합니다. |
JSON |
toLocaleString():String 로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. |
Object |
toString():String 지정된 객체의 문자열 표현을 반환합니다. |
Object |
valueOf():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.as
다음 예제에서는 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);
}
}
=================================
=================================
=================================
ActionScript에서 JSON 데이터를 읽어서 파싱하는 예제입니다.
Cake's Good의 내용을 약간 수정하고, adobe core library를 최신 버전으로 업데이트 한 예제입니다.
1. adobe core library를 다운로드 받습니다. 다운로드 받은 파일을 압축을 풀고 src 폴더 안의 com 폴더를 .fla파일이 있는 폴더에 복사해 줍니다.
2. PHP나 개발자가 사용하는 언어로 JSON 파일을 만들어 줍니다.
[ {"name":"Jaylo", "number":"3243251", "age":"23"}, {"name":"Jenny", "number":"8675309", "age":"35"}]
3. 플래쉬 파일에서 첫번째 프레임에 아래 코드를 넣어 줍니다.
import com.adobe.serialization.json.JSON
/* Objects 생성 */
var loader:URLLoader = new URLLoader() ;
var request:URLRequest = new URLRequest() ;
/* numbers.txt에서 데이터 읽어 오기. */
request.url = "numbers.php" ;
loader.load(request) ;
/* 파일 읽기가 완료 되고 나서 decodeJSON을 실행하기 위해서 listener 등록 */
loader.addEventListener(Event.COMPLETE, decodeJSON) ;
/* JSON데이터 디코딩 */
function decodeJSON(event:Event):void {
var loader:URLLoader = URLLoader(event.target) ;
var People:Array = JSON.decode(loader.data) ;
/* JSON data를 출력해 보기 */
trace(People[0].name) ; //Jaylo
trace(People[0].number) ; //3243251
trace(People[0].age) ; // 23
trace(People[1].name) ; //Jenny
trace(People[1].number) ; //8675309
trace(People[1].age) ; // 35
trace("-------------------");
/* for loop로 출력해 보기 */
for (var key:Object in People) {
trace(People[key].name) ;
trace(People[key].number) ;
trace(People[key].age) ;
}
}
실행 결과
Jaylo
3243251
23
Jenny
8675309
35
-------------------
Jaylo
3243251
23
Jenny
8675309
35
예제 다운로드
원본 : http://www.cakesgood.com/2009/04/flash-cs3-actionscript-30-json-keep-it_3277.html
=================================
=================================
=================================
'ADOBE > ActionScript' 카테고리의 다른 글
플래시 air 안드로이드 런처화면, 초기화면, splash image 관련 (0) | 2020.09.20 |
---|---|
adobe air 액션스크립트 as3 마우스 입력 캡처 드래그 앤 드롭 기능 관련 (0) | 2020.09.20 |
adobe air 액션스크립트 파일 쓰기 읽기, 파일탐색기 사용 관련 (0) | 2020.09.20 |
[Flex,AIR,ActionScript 3.0]Matrix를 이용해 이동,스케일링,회전,거울효과 적용 (0) | 2020.09.20 |
플래시 AS3.0 Textfield에 Tag를 사용하여 Embed자원 이미지를 지정하기 (0) | 2020.09.19 |