给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是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}
public void parseJsonObject(String json) { try { JSONObject jsonObject = new JSONObject(json); String name = jsonObject.getString("name"); int age = jsonObject.getInt("age"); boolean male = jsonObject.getBoolean("male"); //接下来该干嘛干嘛 } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public void parseJSONArray(String json) { try { JSONArray jsonArray = new JSONArray(json); for (int i = 0; i < jsonArray.length(); i++) { jsonObject = jsonArray.getJSONObject(i); String name = jsonObject.getString("name"); int age = jsonObject.getInt("age"); boolean male = jsonObject.getBoolean("male"); //接下来该干嘛干嘛 } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public void parseJsonPerson(String json) { try { JSONObject jsonObject = new JSONObject(json); String name = jsonObject.getString("name"); int age = jsonObject.getInt("age"); boolean male = jsonObject.getBoolean("male"); JSONObject addressJSON = jsonObject.getJSONObject("address"); String street = addressJSON.getString("street"); String city = addressJSON.getString("city"); String country = addressJSON.getString("country"); Address address = new Address(street, city, country); Person person = new Person(name, age, male, address); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
4.[{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}},
{"name":"赵小亮", "age"=22, "male":false, "address":{"street":"九州港", "city":"珠海","country":"中国"}}]
public void parseJsonArrayPerson(String json) { List<Person> persons = new ArrayList<Person>(); try { jsonArray = new JSONArray(json); for (int i = 0; i < jsonArray.length(); i++) { jsonObject = jsonArray.getJSONObject(i); String name = jsonObject.getString("name"); int age = jsonObject.getInt("age"); boolean male = jsonObject.getBoolean("male"); JSONObject addressJSON = jsonObject.getJSONObject("address"); String street = addressJSON.getString("street"); String city = addressJSON.getString("city"); String country = addressJSON.getString("country"); Address address = new Address(street, city, country); Person person = new Person(name, age, male, address); persons.add(person); Log.v("juno", person.toString()); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.v("juno", persons.toString()); }
public List<Salution> parseJSON(String str){ Log.d("返回的JSON数据:", str); List<Salution> busList = new ArrayList<Salution>(); try { JSONObject jsonObject = new JSONObject(str); JSONObject busesJSON = jsonObject.getJSONObject("buses"); JSONArray busJSArray=busesJSON.getJSONArray("bus"); for(int i=0;i<busJSArray.length();i++){ JSONObject busJSObject = busJSArray.getJSONObject(i); JSONObject segsJSObject=busJSObject.getJSONObject("segments"); JSONArray segJSArray=segsJSObject.getJSONArray("segment"); Salution st=new Salution(); for(int j=0;j<segJSArray.length();j++){ if(j==0){ JSONObject segJSObject = segJSArray.getJSONObject(j); st.setLine_name1(segJSObject.getString("line_name")); Log.d("line_name", segJSObject.getString("line_name")); st.setStats1(segJSObject.getString("stats")); st.setEnd_stat1(segJSObject.getString("end_stat")); st.setStart_stat1(segJSObject.getString("start_stat")); } if(j==1){ JSONObject segJSObject = segJSArray.getJSONObject(j); st.setLine_name2(segJSObject.getString("line_name")); Log.d("line_name", segJSObject.getString("line_name")); st.setStats2(segJSObject.getString("stats")); st.setEnd_stat2(segJSObject.getString("end_stat")); st.setStart_stat2(segJSObject.getString("start_stat")); } } busList.add(st); } return busList; } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }