使用JSON进行网络数据交换Word下载.docx
《使用JSON进行网络数据交换Word下载.docx》由会员分享,可在线阅读,更多相关《使用JSON进行网络数据交换Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
此外,JavaScript中的null被表示为null,注意,true、false和null都没有双引号,否则将被视为一个String。
JSON还可以表示一个数组对象,使用[]包含所有元素,每个元素用逗号分隔,元素可以是任意的Value,例如,以下数组包含了一个String,Number,Boolean和一个null:
viewplaincopytoclipboardprint?
["
12345,false,null]
Object对象在JSON中是用{}包含一系列无序的Key-Value键值对表示的,实际上此处的Object相当于Java中的Map<
String,Object>
,而不是Java的Class。
注意Key只能用String表示。
例如,一个Address对象包含如下Key-Value:
city:
Beijing
street:
ChaoyangRoad
postcode:
100025(整数)
用JSON表示如下:
{"
city"
:
Beijing"
"
street"
ChaoyangRoad"
postcode"
100025}
其中Value也可以是另一个Object或者数组,因此,复杂的Object可以嵌套表示,例如,一个Person对象包含name和address对象,可以表示如下:
name"
Michael"
address"
}
{"
100025}}
一个实际例子
接下来,我会通过一个例子来详细说明OPhone客户端程序如何访问服务端的接口程序读取用户列表数据,并在模拟器上显示用户列表数据。
1、服务端接口程序
首先,我们创建一个名为User的JavaBean作为用户对象类,用来保存演示数据。
publicclassUser{
privateintid;
s=keyword>
privateStringname;
privateStringemail;
privateStringgender;
publicintgetId(){
returnid;
publicvoidsetId(intid){
this.id=id;
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
this.name=name;
publicStringgetEmail(){
returnemail;
publicvoidsetEmail(Stringemail){
this.email=email;
publicStringgetGender(){
returngender;
publicvoidsetGender(Stringgender){
this.gender=gender;
publicclassUser{privateintid;
privateStringname;
privateStringemail;
privateStringgender;
publicintgetId(){returnid;
}publicvoidsetId(intid){this.id=id;
}publicStringgetName(){returnname;
}publicvoidsetName(Stringname){this.name=name;
}publicStringgetEmail(){returnemail;
}publicvoidsetEmail(Stringemail){this.email=email;
}publicStringgetGender(){returngender;
}publicvoidsetGender(Stringgender){this.gender=gender;
}}
接下来,我们创建一个名为JSONDemoServlet的Servlet类来作为服务端的接口程序。
在这个程序里,定义了一个List对象用来保存用户列表。
privateList<
User>
list;
客户端程序访问服务器端接口时,接口通过prepareData方法为用户列表初始化数据,添加用户数据到List对象中。
privatevoidprepareData(){
list=newArrayList<
();
&
nbsp;
Userbean1=newUser();
bean1.setId(1001);
bean1.setName("
Tony"
);
bean1.setEmail("
tony@"
bean1.setGender("
male"
list.add(bean1);
……
privatevoidprepareData(){list=newArrayList<
Userbean1=newUser();
bean1.setId(1001);
bean1.setName("
bean1.setEmail("
bean1.setGender("
list.add(bean1);
……}
接着遍历用户列表,把列表中的每个Java用户对象转换为JSONObject对象,再加入到JSONArray中去。
JSONArrayarray=newJSONArray();
for(Userbean:
list){
//单个用户JSON对象
JSONObjectobj=newJSONObject();
try{
obj.put("
id"
bean.getId());
bean.getName());
email"
bean.getEmail());
gender"
bean.getGender());
}catch(Exceptione){}
array.put(obj);
JSONArrayarray=newJSONArray();
for(Userbean:
list){//单个用户JSON对象JSONObjectobj=newJSONObject();
try{obj.put("
obj.put("
}catch(Exceptione){}array.put(obj);
}
最后,通过Servlet输出JSON时,需要设置正确的MIME类型和字符编码。
假定服务器使用UTF-8编码,则可以使用以下代码输出编码后的JSON文本:
response.setContentType("
text/plain"
response.setCharacterEncoding("
UTF-8"
PrintWriterout=response.getWriter();
out.write(array.toString());
out.flush();
out.close();
JSONDemoServlet.java的完整代码如下:
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.ArrayList;
importjava.util.List;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.json.JSONArray;
importorg.json.JSONObject;
publicclassJSONDemoServletextendsHttpServlet{
privatestaticfinallongserialVersionUID=-7368225680407826408L;
/**
*处理post方式提交的数据
*/
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doGet(request,response);
*出来get方式提交的数据
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//准备用户数据
prepareData();
//JSON数组
JSONObjectobj=newN>
JSONObject();
//输出
Userbean2=newUser();
bean2.setId(1002);
bean2.setName("
Jack"
bean2.setEmail("
jack@"
bean2.setGender("
list.add(bean2);
nbsp;
Userbean3=newUser();
bean3.setId(1003);
bean3.setName("
Marry"
bean3.setEmail("
marry@"
bean3.setGender("
female"
list.add(bean3);
Userbean4=newUser();
bean4.setId(1004);
bean4.setName("
Linda"
bean4.setEmail("
linda@"
bean4.setGender("
list.add(bean4);
out.close();
JSONDemoServlet.java的完整代码如下:
publicclassJSONDemoServletextendsHttpServlet{
/***处理post方式提交的数据*/
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{doGet(request,response);
}/***出来get方式提交的数据*/
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//准备用户数据
//JSON数组
list){/
/单个用户JSON对象
try{obj.put("
}
catch(Exceptione){}
//输出
}
privatevoidprepareData(){
Userbean3=newUser();
把该Servlet部署到Tomcat下,在浏览器输入接口地址http:
//localhost:
8080/article/JSONDemoServlet,输出结果如下:
[{"
1001,"
},{"
1002,"
1003,"
1004,"
}]
2、手机客户端程序
准备好服务端的接口后,接下来就是准备写客户端的程序了。
打开Eclipse新建一个OPhone项目。
我们创建一个名为MainActivity的Activity类,如下图所示:
因为要访问外部网络,所以要在AndroidManifest.xml文件里增加一行安全许可:
<
uses-p