flex json

8679 ワード

XMLは強力だが、xmlが簡潔ではなく、符号化と復号化にも一定の難易度があると考える人もいる.そこで21世紀初頭にJSON符号化が発明され、xmlよりコンテンツが少なく読みやすく、符号化復号化の難易度もxmlより簡単であるため、急速にxmlよりも人気のある符号化フォーマットに普及した.JSON符号化はデータ構造の分析に由来し、すべてのデータ構造は3種類の基本データ構成単位に分けることができる.
 
1つ目のタイプは、スカラー、すなわち個別の文字列または数値です.
2つ目のタイプはシーケンスです.つまり、いくつかの関連データが一定の順序で並べられ、配列やリストとも呼ばれます.
3つ目のタイプは、マッピング、すなわち名前/値ペアであり、関連配列(Objectまたはディクショナリ)とも呼ばれる.
 
ほとんどの言語にはこの3つのタイプがあり、as 3も例外ではありません.これはJSONが共通の符号化フォーマットの基礎となっています.JSONは以下の規範を提出しています.
 
1.並列データ間をカンマ(",")で区切ります.
2.マッピングはコロン(":")で表されます.
3.並列データの集合(配列)をかっこ("[])で表す.
4.マッピングされた集合(オブジェクト)は、括弧("{}")で表されます.
 
これはc++,java,c#,javascriptなどの一般的な言語の作成習慣に合致し、as 3も例外ではありません.例えば:
[
{「名前」:「張三」,「性別」:「男」,「年」:28},
{「名前」:「四鳳」、「性別」:女、「年齢」:24}
]
{"backgroundPic":"aaaa","mapBounds":{"x":10,"y":20},"hero":{ここに英雄データを書く},"secnceVec":[{シーン1データ},{シーン2データ}...]「モンスターVec」:[{モンスター1データ},{モンスター2データ}...]「coinVec」:[{金貨1データ},{金貨2データ}...]「whoYourDadVec」:[{無敵薬水1データ},{無敵薬水2データ}...]「bouncyPointVec」:[{スプリングポイント1データ},{スプリングポイント2データ}...]}
 
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>;

        }

}


 
 
 
 
この構造はas 3の字面値と非常に似ているため、as 3を用いてJSONを記述することは非常に大きな利点があり、現在as 3にはJSON符号化が内蔵されていないため、AdobeのJSONツールパッケージをダウンロードする必要があり、ダウンロード後にJSONクラスの符号化と復号を使用することができ、JSONの使用も非常に簡単で、2つの静的方法:JSONのみを含む.Encode(o:Object):StringとJSON.decode(s:String,strict:Boolean=true):*,endode()は関連配列,Arrayを文字列に変換でき,decode()はjson形式の文字列をObjectに変換でき,strictは厳密な検査に用いられ,フォーマットが標準でない場合JSOnParseErrorのエラーが報告されるが,以下はJSON符号化と復号化を用いる例である.
 
<?xml version="1.0" encoding="utf-8"?>

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 

					   xmlns:s="library://ns.adobe.com/flex/spark" 

					   xmlns:mx="library://ns.adobe.com/flex/mx"

					   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);

				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 ); 

				trace( jsonStr2 );

				

				getJSON();

			} 

			

			public function getJSON():void{

				var urlLoader:URLLoader = new URLLoader();

				urlLoader.load(new URLRequest( "model/ssss.php"));

				urlLoader.addEventListener(Event.COMPLETE, decodeJSONHandler);

				

			}

			private var sss:Object=new Object();

			

			private function decodeJSONHandler(event:Event):void{

				var jsonArray:Array = com.adobe.serialization.json.JSON.decode( URLLoader( event.target ).data );

				trace(jsonArray);

				

				for (var i:int=0; i<jsonArray.length; i++) {

					trace( jsonArray[i] .firstName);

				}

			}

			

		]]>

	</fx:Script>

	<fx:Declarations>

		<!-- Place non-visual elements (e.g., services, value objects) here -->

	</fx:Declarations>

</s:WindowedApplication>


ssss.php
[{"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 decompressionzhanzhihu340,1,2,3zhanzhihu{"lastName":"Gate","firstName":"bill","com":"Microsoft"}[object Object],[object Object],[object Object]IsaacTadFrank[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[静的]ActionScript値を表すJSON形式の文字列を返します.
 
 
<?xml version="1.0" encoding="utf-8"?>

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 

					   xmlns:s="library://ns.adobe.com/flex/spark" 

					   xmlns:mx="library://ns.adobe.com/flex/mx"

					   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>