• flex json


    XML虽然强大但有人觉得xml不够简洁,编码和解码也有一定难度,于是21世纪初有人发明了JSON编码,相比xml内容少并且容易阅读,编码解码的难度也比xml简单,因此迅速得到普及成为比xml更加受欢迎的编码格式。JSON编码来源于对数据结构的分析,所有数据结构都可以分为3种基本数据组成单位:

    第一种类型是标量,也就是一个单独的字符串或数字。

    第二种类型是序列,也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组或列表

    第三种类型是映射,也就是一个名/值对,又称作关联数组(Object或字典(Dictionary

    几乎所有语言都有这三种类型,as3也不例外,这是JSON成为通用的编码格式基础,JSON提出如下规范:

    1.并列的数据之间用逗号("")分隔。

    2.映射用冒号("")表示。

    3.并列数据的集合(数组)用方括号("[]")表示。

    4.映射的集合(对象)用大括号("{}")表示。

    这符合像c++,javac#,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数据}...]
    }

     

    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编码,需要下载AdobeJSON工具包,下载完后就可以使用JSON类编码和解码,JSON使用起来也非常简单,它仅包括两个静态方法:JSON.encode(o:Object):StringJSON.decode( s:String, strict:Boolean = true ):*,endode()可以将关联数组、Array转化为字符串,decode()可以将json格式的字符串转化为Objectstrict用于严格检查,如果格式不标准会报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 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 值。

     

    <?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>
    

     


  • 相关阅读:
    驱动程序细节和权衡
    交互
    查找UI元素
    Selenium-Webdriver API命令和操作-Get & Wait
    Selenium的webdriver
    openssl生成ssl证书
    tony_nginx_02_URL重写
    CPA
    消息队列产品比较
    元数据交换绑定的秘密
  • 原文地址:https://www.cnblogs.com/houdinime/p/2953352.html
Copyright © 2020-2023  润新知