探讨J2ME/J2EE的JSON数据交换方式(1)(2)
5数据交换框架实现
5.1框架总体设计
框架结构包括2部分:J2ME客户端和J2EE服务器端。客户端采用J2ME的MIDP技术,服务器端使用J2EE的servlet技术。客户端使用HTTP协议发送已序列化的JSON消息到服务器端,服务器端通过反序列化JSON消息,根据客户端请求进行相应的操作后,把请求的结果序列化成JSON消息返回给客户端,客户端获取到返回的JSON消息后,反序列化成具体需要的数据。图1为总体设计框架。
5.2服务器端
服务器端使用serverlet接收客户端发送的基于HTTP协议的JSON消息,并调用JSONObject类对JSON进行反序列化操作,得到所需的详细信息。根据JSON格式的数据类型,需要分3种情况对JSON格式的数据进行反序列化:
①简单的对象形式。实现方法:创建一个JSONObiect实例,然后调用getString()函数,具体形式如下:
- JSONObjectjsonObj=newJSONObject(message);
- Stringtitle=jsonObj.getString(“title”);
其中message为接收到的JSON消息,title代表想要获取的名称。
②对象里面嵌套对象的形式。实现方法:在原对象基础上调用其getJSONObject()方法。具体形式如下:
- JSONObjectbody_obj=jsonObj.getJSONObject();
③数组形式。实现方法:在原对象的基础上调用其getJSONArray(),得到一个数据类型为JSONOebject的数组。反序列化得到请求的详细信息后,J2EE端根据请求进行其他操作,如从网络上获取XML数据、从数据库获取数据等。得到数据后,服务器端把数据序列化成JSON格式消息,发送到客户端。
5.3客户端
客户端向服务器端发送已被序列化的JSON格式消息,然后等待服务器端返回的消息,接到服务器返回的消息后,反序列化JSON消息。处理过程调用ison.me的API。具体实现如下:
①序列化成JSON格式。只需调用JSONObjeet的put方法添加相关项。JSONObject可以添加3种对象:简单的对象、JSONObject对象、JSONArray对象。具体操作如下:
- JSONObjectheader=newJSONObjeet();
- headerput(“title”,“yahoonews”);
- JSONObjectchildObj=newJSONObject();
- header.put(“child”,childObj);
- JSONArrayarrayObj=newJSONArray();
- headerput(“array”,arrayObj);
②反序列化JSON格式消息。反序列化也包括3种情况:简单的JSONObject对象、嵌套的JSONObject对象、数组对象。具体实现如下:
- JSONObjectobj=newJSONObject(str);
- Stringtitle=obj-getString(“title”);
- intcount=obj.getInt(“count”);
- JSONObjectbody=obj.getJSONObject(“body”);
- JSONArrayarrayObj=obj.getJSONArray(“array”);
5.4传输协议层
客户端和服务器端之间的通信采用HTTP协议。HTTP协议是一种广泛使用的协议,所有MIDP设备都支持HTTP协议。且在各种不同的无线网络上,HTTP协议实现相对较容易。HTTP协议请求方式有GET和POST两种。由于GET请求发送大数据块时对URL字符串长度有限制。对象JSON字符串长度可能很长,尤其当使用极其复杂的对象时。
同时,在跨域网络以纯文本方式发送所有数据,安全性难以保证.因此建议采用POST方式发送机密或内容极长的请求。
6结束语
通过分析JSON、XML与自定义数据交换格式,提出以JSON作为轻量级数据交换格式,并给出其在客户端(J2ME)与服务器端(J2EE)解决方法的一般框架,解决了自定义和使用XML数据交换格式所带来的繁琐、耗费资源的缺陷。