רן בר-זיק     לפני 13 שנים     כ- 2 דקות קריאה  

קריאת JSON עם ActionScript 3 | אינטרנט ישראל

תוכנה

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. אחרי כן הכל זה עניין של סמנטיקה.