XML雖然強大但有人以爲xml不夠簡潔,編碼和解碼也有必定難度,因而21世紀初有人發明了JSON編碼,相比xml內容少而且容易閱讀,編碼解碼的難度也比xml簡單,所以迅速獲得普及成爲比xml更加受歡迎的編碼格式。JSON編碼來源於對數據結構的分析,全部數據結構均可以分爲3種基本數據組成單位:javascript
第一種類型是標量,也就是一個單獨的字符串或數字。php
第二種類型是序列,也就是若干個相關的數據按照必定順序並列在一塊兒,又叫作數組或列表html
第三種類型是映射,也就是一個名/值對,又稱做關聯數組(Object或字典(Dictionary)java
幾乎全部語言都有這三種類型,as3也不例外,這是JSON成爲通用的編碼格式基礎,JSON提出以下規範:c++
1.並列的數據之間用逗號(",")分隔。json
2.映射用冒號(":")表示。c#
3.並列數據的集合(數組)用方括號("[]")表示。數組
4.映射的集合(對象)用大括號("{}")表示。數據結構
這符合像c++,java,c#,javascript等經常使用語言的編寫習慣,as3也不例外,例如:工具
[
{"姓名":"張三","性別":"男","年紀":28},
{"姓名":"四鳳","性別":女,"年紀":24}
]
{
"backgroundPic":"aaaa",
"mapBounds":{"x":10,"y":20},
"hero":{這裏寫你的英雄數據},
"secnceVec":[{場景1數據},{場景2數據}...],
"monsterVec":[{怪物1數據},{怪物2數據}...],
"coinVec":[{金幣1數據},{金幣2數據}...],
"whoYourDadVec":[{無敵藥水1數據},{無敵藥水2數據}...],
"bouncyPointVec":[{彈簧點1數據},{彈簧點2數據}...]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package
gameElements.data
{
import
flash.geom.Point;
/**
* 一個關卡包含的數據
* */
public
class
Ele_MissionData
{
/**
* 背景圖片
* */
public
var
backgroundPic:
String
;
/**
* 地圖大小
* */
public
var
mapBounds:Point;
/**
* 英雄數據
* */
public
var
hero:Ele_Hero_Data;
/**
* 場景數據
* */
public
var
secnceVec:Vector.<Ele_Secnce_Data>;
/**
* 怪物數據
* */
public
var
monsterVec:Vector.<Ele_Monster_Data>;
/**
* 金幣數據
* */
public
var
coinVec:Vector.<Ele_Coin_Data>;
/**
* 無敵藥水數據
* */
public
var
whoYourDadVec:Vector.<Ele_WhosYourDad_Data>;
/**
* 彈簧點數據
* */
public
var
bouncyPointVec:Vector.<Ele_BouncyPoint_Data>;
}
}
|
這個結構和as3的字面值很是類似,所以使用as3編寫JSON有很是大的優點,目前as3中尚未內置JSON編碼,須要下載Adobe的JSON工具包,下載完後就可使用JSON類編碼和解碼,JSON使用起來也很是簡單,它僅包括兩個靜態方法:JSON.encode(o:Object):String和JSON.decode( s:String, strict:Boolean = true ):*,endode()能夠將關聯數組、Array轉化爲字符串,decode()能夠將json格式的字符串轉化爲Object,strict用於嚴格檢查,若是格式不標準會報JSONParseError的錯誤,下面是使用JSON編碼和解碼的例子:
ssss.php
1
2
3
|
[{
"firstName"
:
"Isaac"
,
"lastName"
:
"Asimov"
,
"genre"
:
"sciencefiction"
},
{
"firstName"
:
"Tad"
,
"lastName"
:
"Williams"
,
"genre"
:
"fantasy"
},
{
"firstName"
:
"Frank"
,
"lastName"
:
"Peretti"
,
"genre"
:
"christianfiction"
}]
|
[SWF] test_json.swf - 2,137,848 bytes after decompression
zhanzhihu
34
0,1,2,3
zhanzhihu
{"lastName":"Gate","firstName":"bill","com":"Microsoft"}
[object Object],[object Object],[object Object]
Isaac
Tad
Frank
[Unload SWF] test_json.swf
flex 4.6 默認添加了json:
parse(text:String, reviver:Function = null):Object [靜態] 接受 JSON 格式的字符串並返回表示該值的 ActionScript 對象。 |
JSON |
stringify(value:Object, replacer:* = null, space:* = null):String [靜態] 返回 JSON 格式的字符串,用於表示 ActionScript 值。 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<s:WindowedApplication xmlns:fx=
"http://ns.adobe.com/mxml/2009"
creationComplete=
"init()"
>
<fx:Script>
<![CDATA[
//import com.adobe.serialization.json.*;
private
var
jsonStr:
String
;
private
var
jsonObj:
Object
;
private
var
jsonObj2:
Object
;
private
var
jsonStr2:
String
;
private
var
jsonObj3:
Object
;
internal
function
init():
void
{
jsonStr =
'{"name":"zhanzhihu","age":22,"gender":"male","arr":[0,1,2,3]}'
;
jsonObj =
new
Object
();
//jsonObj = com.adobe.serialization.json.JSON.decode(jsonStr);
jsonObj = JSON.parse(jsonStr);
trace
(jsonObj.name);
trace
(jsonObj.age +
12
);
trace
(jsonObj.arr);
trace
(jsonObj[
"name"
]);
jsonObj2 =
new
Object
();
jsonObj2.firstName =
"bill"
;
jsonObj2.lastName =
"Gate"
;
jsonObj2.com =
"Microsoft"
;
//jsonStr2 = com.adobe.serialization.json.JSON.encode( jsonObj2 );
jsonStr2 = JSON.stringify(jsonObj2);
trace
( jsonStr2 );
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
</s:WindowedApplication>
|