JSON(JavaScript Object Notation),是一种轻量级的数据交换格式,易于解析和生成,也易于阅读和编写。ajax的模式和构架被大量网站应用,JSON作为数据传输会是个首选。
虽然AS3对XML的解析已经很好了,但XML作为数据传输数据量大,服务器负担会过重。JSON本身的结构就简单易于理解,它的特点就是数据量小,数据的结构清晰。
下面说下as3对JSON的获取和发送(PS:http://code.google.com/p/as3corelib/ 可以下载到JSON的类库):
Json代码:
| [{"type":"pic","num":"1"},  {"type":"text","num":"2"},  {"type":"swf","num":"3"},  {"type":"html","num":"4"}]  | 
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 urlLoader:URLLoader = new URLLoader(); urlLoader.load(new URLRequest( “http://127.0.0.1/json.php” ));//这里是你要获取JSON的路径 urlLoader.addEventListener(Event.COMPLETE, decodeJSONHandler); } private function decodeJSONHandler(event:Event):void { var jsonArray:Array = JSON.decode( URLLoader( event.target ).data ); //获取数组中存储的数据 for (var i=0; i<jsonArray.length; i++) { trace( jsonArray[i].type ); } } } }
以上是获取JSON,使用到的是Decode方法,接下来使用Json里的另一个方法Encode,发送Json:
ActionScript代码:
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 objectArray: Array = new Array({"type":"pic","num":"1"}, {"type":"text","num":"2"}, {"type":"swf","num":"3"}, {"t ype":"html","num":"4"});//这里是要发送的数据,可以直接写,也可以是由其他方法生成,不过要注意格式。 sendjson( objectArray); } private function sendjson( array : Array ):void { var jsonString : String = JSON.encode(array); 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; var urlLoader:URLLoader = new URLLoader(); urlLoader.addEventListener(Event.COMPLETE, onURLLoaderCompleteEvent); urlLoader.load(urlRequest); } private function onURLLoaderCompleteEvent( event: Event ):void { var xml:XML = new XML(event.target.data); trace(xml); } } }
文章来源:http://www.cnblogs.com/DeasonGuan/archive/2011/07/21/2112615.html
第二篇:来自网络
其实在AS中使用json其实并不是一个必须或是很好的选择,因为AS对xml的解析已经很不错了,但是为什么可以考虑使用json呢,有以下几点:
json是介于单纯的文本方式
(如:firstName=Brett&lastName=McLaughlin&email=brett@newInstance.com)和xml(<request><firstName>Brett</firstName><lastName>McLaughlin</lastName><email>brett@newInstance.com</email></request>)中间的一种格式,他具有文本和xml的中性优势:数据量小和清晰的数据格式。
  json是javaScriptObjectNotation的简写,那么意思就是说他是来自于javascript的东西。因为现在ajax的流行,大部分网站会采用ajax的模式和构架,那么json会是一个数据传输的首选(文本方式太简单,要是大数据量的时候无法理解,xml的方式数据量大,在解析的时候会增加服务器负担),那么要是一个网站从ajax构架的基础上出一个flex/flash版的界面的时候使用json会最少地减少服务器端的程序改动。
  服务器端现在有成熟的JSON解析代码(因为JSON运用太广泛了),那么在开发的时候也不用担心服务器端的解析。
  JSON是什么?
  简单JSON示例
  程序代码、
//按照最简单的形式,可以用下面这样的JSON表示名称/值对:
  {"firstName":"Brett"}
  //这个示例非常基本,而且实际上比等效的纯文本[wen ben]名称/值对占用更多的空间[kong jian]:
  firstName=Brett
  //但是,当将多个名称/值对串在一起时,JSON就会体现出它的价值了。首先,可以创建包含多个名称/值对的记录,比如:
  {"firstName":"Brett","lastName":"McLaughlin","email":" brett@newInstance.com "}
  从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下JSON更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系值的数组
  当需要表示一组值时,JSON不但能够提高可读性,而且可以减少复杂性例如,假设您希望表示一个人名列表在XML中,需要许多开始标记和结束标记如果使用典型的名称/值对(就像在本系列前面文章中看到的那种名称/值对),那么必须建立一种专有的数据格式或者将键名称修改为person1-firstName这样的形式。
  程序代码
  //如果使用JSON,就只需将多个带花括号的记录分组在一起:
  {"people":[
  {"firstName":"Brett","lastName":"McLaughlin","email":" brett@newInstance.com "},
  {"firstName":"Jason","lastName":"Hunter","email":" jason@servlets.com "},
  {"firstName":"Elliotte","lastName":"Harold","email":" elharo@macfaq.com "}
  ]}
  这不难理解。在这个示例中,只有一个名为people的变量值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址上面的示例演示如何用括号将记录组合[zu he]成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):
  程序代码
  {"programmers":[
  {"firstName":"Brett","lastName":"McLaughlin","email":" brett@newInstance.com "},
  {"firstName":"Jason","lastName":"Hunter","email":" jason@servlets.com "},
  {"firstName":"Elliotte","lastName":"Harold","email":" elharo@macfaq.com "}
  ],
  "authors":[
  {"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},
  {"firstName":"Tad","lastName":"Williams","genre":"fantasy"},
  {"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}
  ],
  "musicians":[
  {"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},
  {"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}
  ]
  }
  这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors和musicians)之间,记录中实际的名称/值对可以不一样。JSON是完全动态的,允许在JSON结构的中间改变表示数据的方式。
  在处理JSON格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。
   下面就介绍一下adobe的官方的json类的用法
  下面是教程,比较简单:
  1、服务器端来的json
  怎么样获得服务器端的json我就不说了吧(就是通讯),那么得到的应该是一个字符串存入变量serverJSON,使用方式如下:
  程序代码
  importjson.*;
  //json格式字符串存入变量serverJSON;
  varserverJSON:String='{"programmers":[{"firstName":"Brett","lastName":"McLaughlin","email":" brett@newInstance.com"},{"firstName":"Jason","lastName":"Hunter","email":"jason@servlets.com"},{"firstName":"Elliotte","lastName":"Harold","email":"elharo@macfaq.com"}],"authors":[{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}],"musicians":[{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}]}' 
  //开始使用
  varjson:Object=newObject();
  json=JSON.decode(serverJSON);
  trace(json.programmers[0].firstName);//输出Brett;
  json就是一个对象了,简单吧。
  不是吧这么简单。其实转变后就成为一个对象了,可以通过点语法[yu fa]来访问这些值了。XML靠边去。
  2、本地对象做成JSON
  你要是能自己拼出JSON字符串也可以,不过我们是在面向对象的世界啊,那么我们都是对象啊,到时候对象直接就可以来用了。
  举一个例子:
  程序代码
  importjson.*;
  varmyObject:Object=newObject();
  myObject.ab="adfsdf";
  myObject.cd=Math.random();
  trace(JSON.encode(myObject));//输出[shu chu]:{"ab":"adfsdf","cd":0.0599129400216043}
  这样就可以给服务器了。
  总结:就两个方法,JSON.decode(String),JSON.encode(Object),有这么简单的方式实现传输量小,而且简单的数据格式,我们为什么还不用呢?
  其实XML自然也有他自己的强势,当一个结构复杂的数据结构出现的时候,这个时候JSON就很难搞定了,XML就是首选了。
第三篇:来自网络
json介绍(维基百科):http://zh.wikipedia.org/wiki/JSON
json主要是由{} [] “” , 等来组成相应格式
本人使用json主要是由于服务器端的文件动态解析比较适用.XML则产生的数据量大,增加服务器负担.下面我简单对比下json和xml的结构联系和区别:
json格式写法(多结点):
json介绍(维基百科):http://zh.wikipedia.org/wiki/JSON
json主要是由{} [] “” , 等来组成相应格式
本人使用json主要是由于服务器端的文件动态解析比较适用.XML则产生的数据量大,增加服务器负担.下面我简单对比下json和xml的结构联系和区别:
json格式写法(多结点):
{
    "date":"2011",
    "item":[
        { "name": "nickro", "add":"china", "sex": "male" },
        { "name": "nickro", "add":"china", "sex": "male" }
    ]
}
xml格式写法:
<?xml version="1.0" encoding="utf-8"?> <main> <date><![CDATA[2011]]></date> <item> <name><![CDATA[nickro]]></name> <add><![CDATA[china]]></add> <sex><![CDATA[male]]></sex> </item> <item> <name><![CDATA[nickro]]></name> <add><![CDATA[china]]></add> <sex><![CDATA[male]]></sex> </item> </main>
从上面的结构大家应该可以看出XML和JSON之间的联系和区别了吧.不懂的同学可以去看些基础知识
下面贴个AS3与JSON通讯的Demo:
首先写个json文件
txt.php:
<pre lang='xml' >
{
    "date":"2011",
    "item":[
        { "name": "nickro", "add":"china", "sex": "male" },
        { "name": "kaly", "add":"England", "sex": "female" }
    ]
}
AS3:
import flash.display.*;
import flash.events.*;
import flash.net.*;
import org.nickro.project.adobe.json.*;//这个类大家可以在google code里找到,自己改路径
 
public class GameJson extends sprite{
    public function GameJson() 
    {
       var urlLoader:URLLoader = new URLLoader();
       urlLoader.load(new URLRequest("txt.php"));//这里是你要获取JSON的路径
       urlLoader.addEventListener(Event.COMPLETE, prizeJson_com);
    }
    private function prizeJson_com(event:Event):void {
       var prizeJson_Obj:Object =new Object();
       prizeJson_Obj=JSON.decode(URLLoader( event.target).data);
       trace("prizeJson_Obj:" + prizeJson_Obj.date);//输出:2011
       trace("prizeJson_Obj:" + prizeJson_Obj.item[0].name);//输出:nickro
    }
}
以上是用的Decode方法.
(这么多足够看明白啥了)
第四篇:来自网络
package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import com.adobe.serialization.json.JSON; public class Main extends Sprite { private var _jsonPath:String = "json_example.txt"; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest(); request.url = _jsonPath; loader.addEventListener(Event.COMPLETE, onLoaderComplete); loader.load(request); } private function onLoaderComplete(e:Event):void { var loader:URLLoader = URLLoader(e.target); var jsonArray:Array = JSON.decode(loader.data); trace("loader.data: " + loader.data); trace(jsonArray[0].Id); // 7 trace(jsonArray[0].Mentions[0].Id); // 5 trace(jsonArray[0].Mentions[0].StatusId); // 34 trace(jsonArray[0].Mentions[0].CreatedDateTime); // /Date(1310051914617+0100)/ trace(jsonArray[0].Mentions[0].Text); // Text trace(jsonArray[0].Mentions[0].UserName); // Username trace(jsonArray[0].Mentions[0].UserLocation); // UK trace(jsonArray[0].Mentions[0].UserLanguage); // en-GB trace(jsonArray[0].Mentions[0].IsCheckIn); // true trace(jsonArray[0].Tips[0].Id); // 5 trace(jsonArray[0].Tips[0].FourSquareId); // 7e06c4b2-1fb5-4f35-9619-c99a384f5ae7 trace(jsonArray[0].Tips[0].CreatedAt); // /Date(1310051914636+0100)/ trace(jsonArray[0].Tips[0].Text); // Text trace(jsonArray[0].Tips[0].Username); // Username trace(jsonArray[0].Checkins); // 0 trace(jsonArray[0].HereNow); // 0 trace(jsonArray[0].TimeStamp); // /Date(1310051914639+0100)/ trace(jsonArray[0].Venue.Id); // 7 trace(jsonArray[0].Venue.FoursquareId); // cacbf3bd-f0aa-403d-9f9b-2056b4985ba1 trace(jsonArray[0].Venue.Name); // Venue Name } } } //////////////////////////////////////////////////////// // Here is the contents of the 'json_example.txt' file //////////////////////////////////////////////////////// /* [ { "Id": 7, "Mentions": [ { "Id": 5, "StatusId": 34, "CreatedDateTime": "\/Date(1310051914617+0100)\/", "Text": "Text", "UserName": "Username", "UserLocation": "UK", "UserLanguage": "en-GB", "IsCheckIn": "true" } ], "Tips": [ { "Id": 5, "FourSquareId": "7e06c4b2-1fb5-4f35-9619-c99a384f5ae7", "CreatedAt": "\/Date(1310051914636+0100)\/", "Text": "Text", "Username": "Username" } ], "Checkins": 0, "HereNow": 0, "TimeStamp": "\/Date(1310051914639+0100)\/", "Venue": { "Id": 7, "FoursquareId": "cacbf3bd-f0aa-403d-9f9b-2056b4985ba1", "Name": "Venue Name" } } ] */
 
                    
                     
                    
                 
                    
                 
                
 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号