最近發現有不少通過“AS3 json”關鍵詞搜尋過來的朋友,可見還是有很多朋友對這方面關注的。不過現下有關AS3 JSON的文章是少之又少,網上搜尋到的基本上也都是那同樣的幾篇文章轉來轉去罷了,也包括我之前那篇,也沒什麼例子。相信會讓很多初學的朋友看得雲裡霧裡的,其實我也覺得奇怪,json其實也算蠻簡單的,怎麼就沒人寫篇好的教程呢。廢話就不多說了,希望轉載的朋友能註明一下出處,謝了。
首先,你需要有一個JSON的類庫,建議去下載adobe官方提供的產品外類庫:as3corelib。類庫的使用就不多說了,大家應該都知道。
先說說擷取資料。可以這麼說,只要你懂AS3與XML的互動,那麼就一定能懂JSON,因為兩者幾乎是一樣的,你唯一需要做的只是瞭解一下JSON 的格式。例如下面這個JSON的例子,就像XML一樣,你可以通過任何動態網頁面來產生這個格式,也可以通過靜態甚至TXT來讀取也行。
[{"name":"Hans","age":"32"},
{"name":"John","age":"12"},
{"name":"Zaki","age":"34"},
{"name":"Dr. Cox","age":"88"}]
package {
import com.adobe.serialization.json.JSON;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class getJSON extends Sprite {
public function getJSON() {
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest( "http://127.0.0.1/json.php" ));//這裡是你要擷取JSON的路徑
loader.addEventListener(Event.COMPLETE, decodeJSON);
}
private function decodeJSON(evt:Event):void {
var persons:Array = JSON.decode( URLLoader( evt.target ).data );
//在這裡,就可以通過運算元組來應用資料了,很方便
for (var i=0; i<persons.length; i++) {
trace( persons[i].name );
}
}
}
}
發送資料的代碼如下:
package {
import com.adobe.serialization.json.JSON;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.*;
public class sendJSON extends Sprite {
public function sendJSON() {
var arr : Array = new Array({"name":"Hans","age":"32"},{"name":"John","age":"12"},{"name":"Zaki","age":"34"},{"name":"Dr. Cox","age":"88"});//這裡是要發送的資料,可以直接寫,也可以是由其他方法產生,不過要注意格式。
sendjson( arr );
}
private function sendjson( a : Array ):void {
var jsonString : String = JSON.encode(a);
var urlVariables:URLVariables = new URLVariables();
urlVariables.json = jsonString;
var urlRequest:URLRequest = new URLRequest(http://127.0.0.1/json.php); //這裡是接收資料的動態網頁。
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = urlVariables;
//其實到這已經結束了,下面的XML只是測試結果而已。
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, onURLLoaderCompleteEvent);
urlLoader.load(urlRequest);
}
private function onURLLoaderCompleteEvent( evt : Event ):void {
var xml:XML = new XML(evt.target.data);
trace(xml);
}
}
}