文档章节

Flex 处理 Json 格式的返回数据

soul_mate
 soul_mate
发布于 2014/07/10 14:56
字数 659
阅读 2423
收藏 4

前序 :

    首先,知道什么是json,知道json 的格式是什么样子的,其次,理解json 处理的需求是来自于Flex和Java 的Servlet通信不能通过对象的方式传递,因此需要json。最后,注意flex json 和Java的json处理需要引入不同的包 : 

      flex 中需要:as3corelib.swc 

      包的添加的位置,flex目录下还是ecplilse 项目路径下(但是这个不确定一定要放在此处)

      

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

       我自己的放置位置 D:\software\zn,目的是为了我方便找,跟你没关系

       

案例:

Flex主要的代码:  

<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主要的代码:

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 :这个流程中最重要的是

    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等,如果内存处理允许的话。



© 著作权归作者所有

共有 人打赏支持
soul_mate
粉丝 4
博文 38
码字总数 17544
作品 0
怀柔
私信 提问
如何用flex+bison写语法分析器

背景 这个星期,项目中要使用C++或C语言解析JSON格式的数据,把解析的结果放到一个通用的数据结构。这个通用的数据结构,实际上是作为web服务层(这一层大家可以认为是类似于PHP服务器或web...

costaxu
2013/02/02
0
0
使用flex,bison构建简单的json解析器

背景 闲来无聊,抽空写篇博客对flex,bison这两个小工具进行介绍一下。工具本身的用途我不在此赘述。由于自己曾经做过配置文件的解析的工作,深知其中的艰辛与痛苦。flex,bion的出现,为自己...

viwii
2013/12/11
0
0
FLEX嵌入JSP中(不是把swf签入到jsp)

1:去ADOBE下载FLEX的TAGLIB for JSP. http://download.macromedia.com/pub/labs/flex2taglibraryjsp/flex2taglibraryforjsp.zip 2:将下载下来的文件解压,里面有2个JAR文件. 将flex-bootstra......

zhenghuazhi
2010/11/11
0
0
FLEX嵌入JSP中(不是把swf签入到jsp)

1:去ADOBE下载FLEX的TAGLIB for JSP. http://download.macromedia.com/pub/labs/flex2taglibraryjsp/flex2taglibraryforjsp.zip 2:将下载下来的文件解压,里面有2个JAR文件. 将flex-bootstra......

zhenghuazhi
2010/11/25
0
0
Flex通信篇——Flex和外部应用程序进行通信

Flash To EXE Flex端 Flex创建一个Flex Project命名为Demo1,类型选Web application(runs in Flash Player) 在Demo1.mxml上添加一个按钮,并未按钮添加点击事件 private function ButtonCli...

彭博
2012/03/09
229
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7 下安装 Nginx

1、添加Nginx存储库 要添加CentOS 7 EPEL仓库,请打开终端并使用以下命令 yum install epel-release 2、安装Nginx 现在Nginx存储库已经安装在您的服务器上,使用以下yum命令安装Nginx yum i...

Oo若离oO
26分钟前
0
0
漏洞防御与修复工作

漏洞管理工作是企业安全建设必不可少的一环,在风险管理工作中,漏洞管理能够防患于未然,企业对漏洞管理有着广泛的基础建设和实践经验。但随着攻防技术的发展,传统漏洞管理的安全技术和管理...

linuxprobe16
今天
1
0
MicroPython技术及应用前景

1 Micropython技术是什么? MicroPython极精简高效的实现了Python3语言。它包含Python标准库的一小部分,能在单片机和受限环境中运行。 1.1 MicroPython发展 由剑桥大学的理论物理学家乔治....

bodasisiter
今天
7
0
跟我学Spring Cloud(Finchley版)-13-通用方式使用Hystrix

本节详细讲解使用Hystrix的通用方式。 简介 Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要...

周立_ITMuch
今天
3
0
🛠️Hanjst/汉吉斯特更新加JavaScript运行时优化等

这是 Hanjst/汉吉斯特 发布以来的首个主要升级更新版本。这次的主要升级更新的内容包括移除HTML Comments注释行, 优化在 Hanjst include模板文件时的JavaScript运行时环境。 Hanjst 在设计和...

wadelau
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部