给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是XML格式或者JSON格式。然后JSON相对XML来说解析相对方便一些,所以先说说JSON的解析。

JSON的基本数据格式有这几种:

1.一个JSON对象——JSONObject

{"name":"胡小威" , "age":20 , "male":true}

2.一个JSON数组——JSONArray

[{"name":"胡小威" , "age":20 , "male":true},{"name":"赵小亮" , "age":22 , "male":false}]

3.复杂一点的JSONObject

{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}}
4.复杂一点的JSONArray
[
{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}},
{"name":"赵小亮", "age"=22, "male":false, "address":{"street":"九州港", "city":"珠海","country":"中国"}}
]

5.来个更复杂的,这是我从爱帮公交上扒取的数据

{"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}

 

接下来是解析部分

一、直接解析

1.{"name":"胡小威" , "age":20 , "male":true}

 



swift 解析json的数据类型 解析json格式_json


1. public void parseJsonObject(String json) {  
2. try {  
3. new JSONObject(json);  
4. "name");  
5. int age = jsonObject.getInt("age");  
6. boolean male = jsonObject.getBoolean("male");  
7. //接下来该干嘛干嘛  
8. catch (JSONException e) {  
9. // TODO Auto-generated catch block  
10.         }  
11.     }



 

 

2.[{"name":"胡小威" , "age":20 , "male":true},{"name":"赵小亮" , "age":22 , "male":false}]

 

 



swift 解析json的数据类型 解析json格式_json



  1. public void parseJSONArray(String json) {  
  2. try {  
  3. new JSONArray(json);  
  4. for (int i = 0; i < jsonArray.length(); i++) {  
  5. "name");  
  6. int age = jsonObject.getInt("age");  
  7. boolean male = jsonObject.getBoolean("male");  
  8. //接下来该干嘛干嘛  
  9. catch (JSONException e) {  
  10. // TODO Auto-generated catch block  
  11.         }  
  12.     }  



  

 

3.{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}}

 

 



swift 解析json的数据类型 解析json格式_json



1. public void parseJsonPerson(String json) {  
2. try {  
3. new JSONObject(json);  
4. "name");  
5. int age = jsonObject.getInt("age");  
6. boolean male = jsonObject.getBoolean("male");  
7. "address");  
8. "street");  
9. "city");  
10. "country");  
11. new Address(street, city, country);  
12. new Person(name, age, male, address);  
13. catch (JSONException e) {  
14. // TODO Auto-generated catch block  
15.         }  
16.     }



 

4.

[

{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}},

{"name":"赵小亮", "age"=22, "male":false, "address":{"street":"九州港", "city":"珠海","country":"中国"}}

]

 

 

 



swift 解析json的数据类型 解析json格式_json


1. public void parseJsonArrayPerson(String json) {  
2. new ArrayList<Person>();  
3. try {  
4. new JSONArray(json);  
5. for (int i = 0; i < jsonArray.length(); i++) {  
6. "name");  
7. int age = jsonObject.getInt("age");  
8. boolean male = jsonObject.getBoolean("male");  
9. "address");  
10. "street");  
11. "city");  
12. "country");  
13. new Address(street, city, country);  
14. new Person(name, age, male, address);  
15. "juno", person.toString());  
16. catch (JSONException e) {  
17. // TODO Auto-generated catch block  
18.         }  
19. "juno", persons.toString());  
20.     }

 

5. {"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}

 



swift 解析json的数据类型 解析json格式_json



1. public List<Salution> parseJSON(String str){  
2. "返回的JSON数据:", str);  
3. new ArrayList<Salution>();  
4. try {  
5. new JSONObject(str);  
6. "buses");  
7. "bus");  
8. for(int i=0;i<busJSArray.length();i++){  
9. "segments");  
10. "segment");                
11. new Salution();  
12. for(int j=0;j<segJSArray.length();j++){  
13. if(j==0){  
14. "line_name"));  
15. "line_name", segJSObject.getString("line_name"));  
16. "stats"));  
17. "end_stat"));  
18. "start_stat"));  
19. if(j==1){  
20. "line_name"));  
21. "line_name", segJSObject.getString("line_name"));  
22. "stats"));  
23. "end_stat"));  
24. "start_stat"));  
25.                     }  
26.                     busList.add(st);      
27. return busList;  
28. catch (JSONException e) {  
29. // TODO Auto-generated catch block  
30.         }  
31. return null;  
32.     }



 

这里我只是简单获取了几个我想要的数据。

 

二、使用JSON类库Gson 来解析JSON

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。

 

首先,从 /p/google-gson/downloads/list下载GsonAPI

 



swift 解析json的数据类型 解析json格式_json



  1. google-gson-1.7.1-release.zip   



 

 

再把gson-1.7.jar copy到libs

可以使用两种方法解析

 

①、通过获取JsonReader对象解析JSON数据:

 



swift 解析json的数据类型 解析json格式_json



    1. "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";  
    2. try{  
    3. new JsonReader(new StringReader(jsonData));  
    4. while(reader.hasNext()){  
    5. while(reader.hasNext()){  
    6. if(tagName.equals("username")){  
    7.             }  
    8. else if(tagName.equals("userId")){  
    9.             }  
    10.         reader.endObject();  
    11.     reader.endArray();  
    12. catch(Exception e){  
    13. }



     

     

     

     

    ②、通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行操作



    swift 解析json的数据类型 解析json格式_json


    1. new TypeToken<LinkedList<User>>(){}.getType();  
    2. new Gson();  
    3. for (Iterator iterator = users.iterator(); iterator.hasNext();) {  
    4.     System.out.println(user.getUsername());  
    5. }