1.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速度)。

2.json的数据格式

1>object

{

"name"aaaaaaaaa:"jackson",

"age":100

}

2>数组

{

“students”:

[

{"name":"jackson","age":100},

{"name":"yu","age":22}

]

}

实例:把服务器端的数据生成json数据格式的返回,在Android客户端获取json数据,解析该json格式的数据。

1.使用Json 需要用到一下几个包,下载这下包放在服务器的项目工程下

json-lib-2.3-jdk15.jarcommons-beanutils-1.7.0.jarcommons-httpclient-3.1.jarcommons-lang-2.3.jarcommons-logging-1.0.4.jarcommons-collections-3.1.jarezmorph-1.0.3.jar2.在Myeclipse下新建一个项目,首先新建一个Json的工具类,通过调用该工具类,可以把数据转换成Json格式的

publicclassJsonTools{publicJsonTools(){//TODOAuto-generatedconstructorstub}/***@paramkey*表示json字符串的头信息*@paramobject*是对解析的集合的类型*@return*/publicstaticStringcreateJsonString(Stringkey,Objectvalue){JSONObjectjsonObject=newJSONObject();jsonObject.put(key,value);returnjsonObject.toString();}

3.给对象赋值

packagecom.json.service;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importcom.json.domain.Person;publicclassJsonService{publicJsonService(){}/**{"person":{"address":"beijing","id":1001,"name":"jack"}}*/publicPersongetPerson(){Personperson=newPerson(1001,"yu","beijing");returnperson;}/**{"persons":[{"address":"guangxi","id":1001,"name":"jack"},{"address":"guangdong","id":1002,"name":"rose"}]}*/publicList<Person>getlistPerson(){List<Person>list=newArrayList<Person>();Personperson1=newPerson(1001,"yu","guangxi");Personperson2=newPerson(1002,"rose","guangdong");list.add(person1);list.add(person2);returnlist;}/**{"liststring":["beijing","shanghai","hunan"]}*/publicList<String>getListString(){List<String>list=newArrayList<String>();list.add("beijing");list.add("shanghai");list.add("hunan");returnlist;}//{"listmap":[{"id":1001,"address":"beijing","name":"jack"},{"id":1002,"address":"shanghai","name":"rose"}]}publicList<Map<String,Object>>getListMaps(){List<Map<String,Object>>list=newArrayList<Map<String,Object>>();Map<String,Object>map1=newHashMap<String,Object>();map1.put("id",1001);map1.put("name","jack");map1.put("address","beijing");Map<String,Object>map2=newHashMap<String,Object>();map2.put("id",1002);map2.put("name","rose");map2.put("address","shanghai");list.add(map1);list.add(map2);returnlist;}}

4.新建一个Servlet 调用 生成json的方法,然后把生成的json格式的数据输出到客户端

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");PrintWriterout=response.getWriter();StringjsonString="";Stringaction_flag=request.getParameter("action_flag");if(action_flag.equals("person")){jsonString=JsonTools.createJsonString("person",service.getPerson());System.out.println("person");}elseif(action_flag.equals("persons")){jsonString=JsonTools.createJsonString("persons",service.getlistPerson());System.out.println("persons");}elseif(action_flag.equals("liststring")){jsonString=JsonTools.createJsonString("liststring",service.getListString());System.out.println("liststring");}elseif(action_flag.equals("listmap")){jsonString=JsonTools.createJsonString("listmap",service.getListMaps());System.out.println("listmap");}out.println(jsonString);out.flush();out.close();}


5.搭建Android客户端,新建一个HttpClient工具类,获取服务器端json格式的数据

packagecom.android.myjson.http;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.net.HttpURLConnection;importjava.net.URL;publicclassHttpUtils{publicHttpUtils(){//TODOAuto-generatedconstructorstub}publicstaticStringgetJsonContent(Stringurl_path){try{URLurl=newURL(url_path);HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();connection.setConnectTimeout(3000);connection.setRequestMethod("GET");connection.setDoInput(true);intcode=connection.getResponseCode();if(code==200){returnchangeInputStream(connection.getInputStream());}}catch(Exceptione){//TODO:handleexception}return"";}privatestaticStringchangeInputStream(InputStreaminputStream){//TODOAuto-generatedmethodstubStringjsonString="";ByteArrayOutputStreamoutputStream=newByteArrayOutputStream();intlen=0;byte[]data=newbyte[1024];try{while((len=inputStream.read(data))!=-1){outputStream.write(data,0,len);}jsonString=newString(outputStream.toByteArray());}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returnjsonString;}}

6.新建一个Json 工具类解析json 数据

packagecom.android.myjson.json;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importorg.json.JSONArray;importorg.json.JSONObject;importcom.android.myjson.domain.Person;publicclassJsonTools{publicJsonTools(){//TODOAuto-generatedconstructorstub}publicstaticPersongetPerson(Stringkey,StringjsonString){Personperson=newPerson();//{"person":{"address":"beijing","id":1001,"name":"jack"}}try{JSONObjectjsonObject=newJSONObject(jsonString);JSONObjectpersonObject=jsonObject.getJSONObject("person");person.setId(personObject.getInt("id"));person.setName(personObject.getString("name"));person.setAddress(personObject.getString("address"));}catch(Exceptione){//TODO:handleexception}returnperson;}publicstaticList<Person>getPersons(Stringkey,StringjsonString){List<Person>list=newArrayList<Person>();//{"persons":[{"address":"guangxi","id":1001,"name":"jack"},{"address":"guangdong","id":1002,"name":"rose"}]}try{JSONObjectjsonObject=newJSONObject(jsonString);JSONArrayjsonArray=jsonObject.getJSONArray(key);for(inti=0;i<jsonArray.length();i++){JSONObjectjsonObject2=jsonArray.getJSONObject(i);Personperson=newPerson();person.setId(jsonObject2.getInt("id"));person.setName(jsonObject2.getString("name"));person.setAddress(jsonObject2.getString("address"));list.add(person);}}catch(Exceptione){//TODO:handleexception}returnlist;}publicstaticList<String>getList(Stringkey,StringjsonString){List<String>list=newArrayList<String>();try{JSONObjectjsonObject=newJSONObject(jsonString);JSONArrayjsonArray=jsonObject.getJSONArray(key);for(inti=0;i<jsonArray.length();i++){Stringmsg=jsonArray.getString(i);list.add(msg);}}catch(Exceptione){//TODO:handleexception}returnlist;}publicstaticList<Map<String,Object>>listKeyMaps(Stringkey,StringjsonString){List<Map<String,Object>>list=newArrayList<Map<String,Object>>();try{JSONObjectjsonObject=newJSONObject(jsonString);JSONArrayjsonArray=jsonObject.getJSONArray(key);for(inti=0;i<jsonArray.length();i++){JSONObjectjsonObject2=jsonArray.getJSONObject(i);Map<String,Object>map=newHashMap<String,Object>();Iterator<String>iterator=jsonObject2.keys();while(iterator.hasNext()){Stringjson_key=iterator.next();Objectjson_value=jsonObject2.get(json_key);if(json_value==null){json_value="";}map.put(json_key,json_value);}list.add(map);}}catch(Exceptione){//TODO:handleexception}returnlist;}}

7.打印出解析后的数据

Stringpath="http://192.168.191.1:8080/jsonProject/servlet/JsonAction?action_flag=person";StringjsonString=HttpUtils.getJsonContent(path);Personperson=JsonTools.getPerson("person",jsonString);Log.i(TAG,person.toString());