Android JSON数据格式解析

       给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是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();
		}
	}

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

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();
		}
	}

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

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());
	}

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"}]}}

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;
    }

原文章地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值