vini123

博客园 首页 新随笔 联系 订阅 管理

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&amp;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"
    }
  }
]
 
*/


posted on 2012-11-03 16:33  黑夜丶残枫  阅读(316)  评论(0)    收藏  举报