频道栏目
首页 > 资讯 > Android > 正文

Android客户端与服务器端交互数据之json解析

17-04-21        来源:[db:作者]  
收藏   我要投稿

Android客户端与服务器端交互数据之json解析。服务器端的工作就是将特定的数据类型转换为json字符串,然后客户端再将json字符串转换成原来的类型,所以json解析是跨平台数据格式转换的一个桥梁,

这里以最常用的对象类型,list包裹对象类型,list包裹String类型,以及list包裹Map对象类型4种情况为例简单介绍json的数据解析

一、首先服务器端将数据转换为json格式

1,首先建立一个Person对象类,后面就是将person对象转换为json格式


packagecom.zml.pojo;

/**
*@author郑明亮
*@Time:2016年2月2日下午10:35:05
*@version1.0
*/
publicclassPerson{
 
Stringname;
Stringsex;
StringQQ;
Stringcontact;


publicPerson(){
//TODOAuto-generatedconstructorstub
}


publicPerson(Stringname,Stringsex,StringqQ,Stringcontact){
super();
this.name=name;
this.sex=sex;
QQ=qQ;
this.contact=contact;
}


/**
*@returnthename
*/
publicStringgetName(){
returnname;
}
 
/**
*@paramname
*thenametoset
*/
publicvoidsetName(Stringname){
this.name=name;
}
 
/**
*@returnthesex
*/
publicStringgetSex(){
returnsex;
}


/**
*@paramsex
*thesextoset
*/
publicvoidsetSex(Stringsex){
this.sex=sex;
}


/**
*@returntheqQ
*/
publicStringgetQQ(){
returnQQ;
}
 
/**
*@paramqQ
*theqQtoset
*/
publicvoidsetQQ(StringqQ){
QQ=qQ;
}
 
/**
*@returnthecontact
*/
publicStringgetContact(){
returncontact;
}


/**
*@paramcontact
*thecontacttoset
*/
publicvoidsetContact(Stringcontact){
this.contact=contact;
}


/*
*(non-Javadoc)
*
*@seejava.lang.Object#toString()
*/
@Override
publicStringtoString(){
return"Person[name="+name+",sex="+sex+",QQ="+QQ
+",contact="+contact+"]";
}
 
}

2.我写了一个工具类,用来生成上述的四种类型的数据;


packagecom.zml.utils;


importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
 
importcom.zml.pojo.Person;
 
/**
*用于生成四种类型的数据来测试json解析:
*①Person对象类型②List③List④List<>>
*
*@author郑明亮
*@Time:2016年2月2日下午10:38:40
*@version1.0
*/
publicclassDataUtil{
 
publicstaticPersongetPerson(){
 
returnnewPerson("郑明亮","男","1072307340","15733100573");
}


publicstaticListgetPersons(){
Listlist=newArrayList();
list.add(getPerson());
list.add(newPerson("张三","男","123456789","98765432"));
list.add(newPerson("李四","女","762348234","12312124324"));
returnlist;
 
}
 
publicstaticListgetStrings(){
Listlist=newArrayList();
list.add("郑明亮");
list.add("张三");
list.add("李四");
 
returnlist;
}


publicstaticList<>>getMaps(){


List<>>list=newArrayList<>>();
Mapmap=newHashMap();
map.put("name","郑明亮");
map.put("blog","blog.csdn.net/zml_2015");
map.put("person",getPerson());
list.add(map);
returnlist;


}


}

packagecom.zml.utils;


importnet.sf.json.JSONObject;


/**
*@author郑明亮
*@Time:2016年2月2日上午12:18:38
*@version1.0
*/
publicclassJsonTools{
 


publicstaticStringcreateJsonString(Stringkey,Objectvalue){


JSONObjectjsonObject=newJSONObject();
jsonObject.put(key,value);
returnjsonObject.toString();


}


}
packagecom.zml.test;


importcom.zml.utils.DataUtil;
importcom.zml.utils.JsonTools;
 
/**
*@author郑明亮
*@Time:2016年2月2日上午12:27:29
*@version1.0
*/
publicclasstestjson{


publicstaticvoidmain(String[]args){
StringjsonString;
jsonString=JsonTools.createJsonString("person",DataUtil.getPerson());


System.out.println(jsonString);
jsonString=JsonTools.createJsonString("persons",DataUtil.getPersons());
 
System.out.println(jsonString);
jsonString=JsonTools.createJsonString("strings",DataUtil.getStrings());


System.out.println(jsonString);
jsonString=JsonTools.createJsonString("maps",DataUtil.getMaps());
System.out.println(jsonString);
}
 
}

5.测试成功后,建立Servlet类,以方便将json数据传输给客户端

packagecom.zml.test;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcom.zml.utils.JsonTools;

/**

*@author郑明亮
*@Time:2016年2月2日下午10:54:26
*@version1.0
*/
publicclassJsonServletextendsHttpServlet{
*Constructoroftheobject.
*/
publicJsonServlet(){
super();
}

/**

*Destructionoftheservlet.
*/
publicvoiddestroy(){
super.destroy();//Justputs"destroy"stringinlog
//Putyourcodehere
}

/**

*ThedoGetmethodoftheservlet.
*
*Thismethodiscalledwhenaformhasitstagvaluemethodequalstoget.
*
*@paramrequest
*therequestsendbytheclienttotheserver
*@paramresponse
*theresponsesendbytheservertotheclient
*@throwsServletException
*ifanerroroccurred
*@throwsIOException
*ifanerroroccurred
*/
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
this.doPost(request,response);

}

/**

*ThedoPostmethodoftheservlet.
*
*Thismethodiscalledwhenaformhasitstagvaluemethodequalsto
*post.
*
*@paramrequest
*therequestsendbytheclienttotheserver
*@paramresponse
*theresponsesendbytheservertotheclient
*@throwsServletException
*ifanerroroccurred
*@throwsIOException
*ifanerroroccurred
*/
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{

response.setContentType("text/html;charset=utf-8");

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
PrintWriterout=response.getWriter();
StringactionString=request.getParameter("action");
 
if(actionString.equals("person")){
 
jsonString=JsonTools.createJsonString("person",DataUtil.getPerson());

}elseif(actionString.equals("persons")){

 
jsonString=JsonTools.createJsonString("persons",DataUtil.getPersons());

}elseif(actionString.equals("strings")){

 
jsonString=JsonTools.createJsonString("strings",DataUtil.getStrings());

}elseif(actionString.equals("maps")){

 
jsonString=JsonTools.createJsonString("maps",DataUtil.getMaps());
 
}
 
out.write(jsonString);

}

/**

*Initializationoftheservlet.
*
*@throwsServletException
*ifanerroroccurs
*/
publicvoidinit()throwsServletException{
//Putyourcodehere
}

}[page]

通过网址访问可得到的JSON数据:

二、客户端解析json数据

这里暂时只贴出重要的解析部分,

 
packagecom.zml.util;


importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;


importorg.json.JSONArray;
importorg.json.JSONException;
importorg.json.JSONObject;


importcom.zml.pojo.Person;


/**
*解析数据:将json字符串解析还原成原来的数据类型
*
*@author郑明亮
*@date2016-2-3上午12:11:57
*@version1.0
*/
publicclassJsonTools{
 
publicstaticPersongetPerson(Stringkey,StringjsonString){
Personperson=newPerson();
//将json字符串转换成json对象
try{
JSONObjectjsonObject=newJSONObject(jsonString);
//将json对象根据key(person),拿到对应的value(Person对象)值
JSONObjectjsonObject2=jsonObject.getJSONObject(key);
//将拿到的对象set到一个person对象中
person.setName(jsonObject2.getString("name"));
person.setSex(jsonObject2.getString("sex"));
person.setQQ(jsonObject2.getString("QQ"));
person.setContact(jsonObject2.getString("contact"));
}catch(JSONExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnperson;
 
}
 
publicstaticListgetPersons(Stringkey,StringjsonString){
Listlist=newArrayList();
JSONObjectjsonObject;
try{
jsonObject=newJSONObject(jsonString);
JSONArrayPersons=jsonObject.getJSONArray(key);
for(inti=0;i<>
  • Personperson=newPerson();

  • JSONObjectjsonObject2=Persons.getJSONObject(i);
    person.setName(jsonObject2.getString("name"));
    person.setSex(jsonObject2.getString("sex"));
    person.setQQ(jsonObject2.getString("QQ"));
    person.setContact(jsonObject2.getString("contact"));
     
    list.add(person);
    }
    }catch(JSONExceptione){
    //TODOAuto-generatedcatchblock
    e.printStackTrace();
    }


    returnlist;
    }
     
    publicstaticListgetStrings(Stringkey,StringjsonString){
    Listlist=newArrayList();


    try{
    JSONObjectjsonObject=newJSONObject(jsonString);
    JSONArrayStringArray=jsonObject.getJSONArray(key);
    for(inti=0;i<>
  • Stringstr=StringArray.getString(i);

  • list.add(str);
     
    }
     
    }catch(Exceptione){
    //TODO:handleexception
    }
     
    returnlist;
     
    }
     
    publicstaticList<>>getMaps(Stringkey,
    StringjsonString){
    List<>>list=newArrayList<>>();
     
    try{
    JSONObjectjsonObject=newJSONObject(jsonString);
    JSONArraymapsArray=jsonObject.getJSONArray(key);
    for(inti=0;i<>
  • JSONObjectjsonObject2=mapsArray.getJSONObject(i);
  • Mapmap=newHashMap();
    //查看Map中的键值对的key值
    Iteratoriterator=jsonObject2.keys();


    while(iterator.hasNext()){
    Stringjson_key=iterator.next();
    Objectjson_value=jsonObject2.get(json_key);
    if(json_value==null){
    //当键值对中的value为空值时,将value置为空字符串;
    json_value="";
    }
    map.put(json_key,json_value);
    }
    list.add(map);
    }
    }catch(Exceptione){
    //TODO:handleexception
    }
    returnlist;
    }
     
    }

    需要注意的是上述,客户端和服务器端虽然都用到了JSONObject类,但是引用的不是一个jar包中的内容哦;客户端的是引用的org.json.JSONObject;而服务器端引用的是net.sf.json.JSONObject;

    相关TAG标签
    上一篇:Linux下C语言获取所有网卡MAC地址的代码
    下一篇:Android 官方数据绑定框架 Data Binding 简单使用
    相关文章
    热门专题推荐 vmware win7激活工具 win10激活工具 excel word office激活 小马激活工具 重装系统 数据恢复 u盘启动工具
    图文推荐
    文章
    推荐
    热门新闻

    关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

    版权所有: 红黑联盟--致力于做实用的IT技术学习网站