JSON, למי שלא מכיר, הוא פורמט נתונים נוח וקל לשימוש שהרבה יותר רזה מ-XML. יותר ויותר שירותים משתמשים ב-XML ולא מזמן יצא לי להשתמש ב-JSON בווידג'ט מבוסס פלאש שיצרתי. זו הזדמנות מצויינת לחלוק עמכם את הדרך שבה ביצעתי את הקריאה ל-JSON ואיך ביצעתי את ה-decoding שלו.
ל-ActionScript 3 אין decoder ל-JSON ולפיכך עלינו להשתמש בספריה חיצונית לשם כך. הבחירה שלי היא as3corelib – ספריה חינמית, אולטרא שימושית שמכילה עוד המון פונקציונליות. יש להוריד אותה מכאן. נפתח אותה ונשמור אותה בתיקית הפרויקט שלנו. אחרי כן ניצור קובץ fla שבו נבצע instance ל-class שלנו.
var myJSON:getMyJSON = new getMyJSON(this);
ועכשיו ליצירת הקלאס החביב ששמו הוא getMyJSON, בקלאס הזה אני אצור אובייקט, אבצע לו encode על מנת להמיר אותו למחרוזת טקסט, אשלח אותו באמצעות URLRequest לסקריפט קטן ב-PHP שהופך את ה-title (זהה לזה שיש במדריך ה-JSON שלי), אקבל את הפלט, אמיר אותו לאובייקט ואדפיס אותו.
איך זה נראה? ככה:
package {
import flash.text.*;
import flash.events.*;
import flash.net.*;
import com.adobe.serialization.json.JSON;
public class getMyJSON {
private var myObj:Object = Object; //My Object
private var myStage; //My stage
private var loader:URLLoader; //my URL loader
public function getMyJSON(myStage) { //Constructor
this.myStage = myStage;
this.myObj.title = "myJsonObject";
this.myObj.value = "My values";
var myJSON = JSON.encode(myObj); //encoding my object
/* send my object to the PHP */
var request:URLRequest = new URLRequest("https://internet-israel.com/internet_files/JSON/json.php");
request.method = "GET";
request.data = 'myJSON='+myJSON;
loader = new URLLoader(request);
loader.addEventListener(Event.COMPLETE, completeListener);
}
/* event completed */
private function completeListener(event:Event):void {
trace("Finished loading. Here is the data: " + loader.data);
var data:String = loader.data;
this.myObj = JSON.decode(data);
this.writeMeDown(this.myObj.title);
}
/* write it down */
private function writeMeDown(str:String) {
var m_myTextField:TextField = new TextField();
m_myTextField.text = str;
this.myStage.addChild(m_myTextField);
}
}
}
תשמרו ותנסו אותו אצלכם, תראו שהפלט שאתם מקבלים הוא אובייקט שזהה לאובייקט שנשלח – רק ה-title של האובייקט שלכם – הפוך.
בסך הכל זה פשוט מאד, מה שחשוב הוא לכלול את ספרית com.adobe.serialization.json.JSON ולדאוג שהיא תהיה במקום הנכון ואז להשתמש ב-JSON.decode ו-JSON.encode. אחרי כן הכל זה עניין של סמנטיקה.