Flex 處理 Json 格式的返回數據

前序 :html

    首先,知道什麼是json,知道json 的格式是什麼樣子的,其次,理解json 處理的需求是來自於Flex和Java 的Servlet通訊不能經過對象的方式傳遞,所以須要json。最後,注意flex json 和Java的json處理須要引入不一樣的包 : java

      flex 中須要:as3corelib.swc 數據庫

      包的添加的位置,flex目錄下仍是ecplilse 項目路徑下(可是這個不肯定必定要放在此處)json

      

       Java 中須要:json-lib-2.2.2-jdk15.jar 和 jsoup-1.6.3.jaride

       我本身的放置位置 D:\software\zn,目的是爲了我方便找,跟你不要緊flex

       

案例:url

Flex主要的代碼:  spa

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init()" >
<mx:Script>
<![CDATA[
    import com.adobe.serialization.json.JSON;
private function init():void{
    var userid:int = 2;   
    requestSend(userid);   
} 
private function requestSend(userid:int):void{  
    http_service.addEventListener(ResultEvent.RESULT,http_service_resultHandler);  
    http_service.addEventListener(FaultEvent.FAULT,http_service_faultHandler);  
    http_service.url="http://localhost:8080/FlexProjectInformation/servlet/GetInformation?userid="+userid;  
    http_service.send(null);  
}  
protected function http_service_resultHandler(event:ResultEvent):void{  
    /** 處理爲array  resultFormat="object" ***********************************/
    var objectStr:String=event.result as String;  
    var JsonObj:Object =com.adobe.serialization.json.JSON.decode(objectStr);//目的是組裝json
    var arr:Array =JsonObj as Array; 
    for(var i=0 ;i<arr.length;i++){
    //處理json 中放置的東西
}
/** 處理爲array  resultFormat="object" ***********************************/
/** 處理爲arraycollection  resultFormat="object" ***********************************/
var objectStr:String=event.result as String;
var arr:Array = (JSON.decode(objectStr) as Array);
arrAC =new ArrayCollection(arr);
for(var i:int=0;i<arrAC.length;i++){  
    var o:Object = arrAC.getItemAt(i);  
    Alert.show(o["projecttable"],o["projectname"],o["dnt"]);  
} 
/** 處理爲arraycollection  resultFormat="object" ***********************************/
/** arraycollection 顯示***********************************/
<mx:DataGrid id="dg" dataProvider="{arrAC}">
    <mx:columns>
        <mx:DataGridColumn headerText="ID" dataField="projecttable"/>
        <mx:DataGridColumn headerText="姓名" dataField="projectname"/>
        <mx:DataGridColumn headerText="年齡" dataField="csq"/>
    </mx:columns>
</mx:DataGrid>
/** arraycollection 顯示***********************************/
}  
protected function http_service_faultHandler(event:FaultEvent):void{  
    Alert.show("沒有數據");
}  
]]>
</mx:Script>
<mx:HTTPService id="http_service" url="" method="GET" resultFormat="object"></mx:HTTPService>
</mx:Application>

Java Servlet主要的代碼:code

String userid = new String(request.getParameter("userid").getBytes("iso-8859-1"),"utf-8");
response.setHeader("Content-type", "text/html;charset=utf8");
response.setCharacterEncoding("utf8");  
PrintWriter out = response.getWriter();
//sonprojectArrayList 是一個ArrayList
try {
    JSONArray jsonArray = JSONArray.fromObject(sonprojectArrayList);
    /*int jsonArraysize =jsonArray.size();
    for (int j = 0; j < jsonArraysize; j++) {
        JSONObject json = JSONObject.fromObject(jsonArray.get(j));
        //out.print("json: "+json+"\n");
        out.print(json+",");//輸出數據格式 {}
    }*/
    out.print(jsonArray);//輸出數據格式[{},{},{},{},{},{}]
} catch (Exception e) {
    System.out.println("json :"+e.getMessage());
}
out.flush();  
out.close();

ps :這個流程中最重要的是orm

    resultFormat="object" resultFormat 返回值的設置,默認是object,固然須要的話能夠指定輸入的格式array xml 等。換句話說Java這端的數據組織格式影響flex端數據處理的效率和方便性,最好的方式是能讓倆端的數據處理"統一化",或者說是

/** 能夠生成 Arraycollection ,arraycollection中放置的是array
var objectStr:String=event.result as String;
var arr:Array = (JSON.decode(objectStr) as Array);
var arrAC:ArrayCollection =new ArrayCollection(arr);
*/

java 和數據庫進行鏈接檢索相關信息時候,將數據庫中須要的信息一次性拿出來到內存中進行處理map等,若是內存處理容許的話。

相關文章
相關標籤/搜索