JSON数据解析

进行JSON解析之前用来效验json码的网址:http://www.bejson.com/

以下是摘自这个网站的内容

json是什么?

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度,

那么,JSON到底是什么?

JSON就是一串字符串 只不过元素会使用特定的符号标注。

{} 双括号表示对象

[] 中括号表示数组

"" 双引号内是属性或值

: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)

所以 {"name": "Michael"} 可以理解为是一个包含name为Michael的对象

而[{"name": "Michael"},{"name": "Jerry"}]就表示包含两个对象的数组

当然了,你也可以使用{"name":["Michael","Jerry"]}来简化上面一部,这是一个拥有一个name数组的对象


案例:

解析以下网址(由百度提供的天气信息API)的内容:http://api.map.baidu.com/telematics/v3/weather?output=json&ak=wwaIKGCMI1n4teVrz5GjRq57&location=%E5%A4%A9%E6%B4%A5

在浏览器中打开后内容是:

{"error":0,"status":"success","date":"2015-09-04","results":[{"currentCity":"天津","pm25":"76","index":[{"title":"穿衣","zs":"热","tipt":"穿衣指数","des":"天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。"},{"title":"洗车","zs":"不宜","tipt":"洗车指数","des":"不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。"},{"title":"旅游","zs":"一般","tipt":"旅游指数","des":"温度适宜,风不大,有降水,旅游指数一般,外出请尽量避开降雨时段,若外出,请注意防雷防雨。"},{"title":"感冒","zs":"少发","tipt":"感冒指数","des":"各项气象条件适宜,无明显降温过程,发生感冒机率较低。"},{"title":"运动","zs":"较不宜","tipt":"运动指数","des":"有降水,推荐您在室内进行健身休闲运动;若坚持户外运动,须注意携带雨具并注意避雨防滑。"},{"title":"紫外线强度","zs":"弱","tipt":"紫外线强度指数","des":"紫外线强度较弱,建议出门前涂擦SPF在12-15之间、PA+的防晒护肤品。"}],"weather_data":[{"date":"周五 09月04日 (实时:23℃)","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/leizhenyu.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/dayu.png","weather":"雷阵雨转中到大雨","wind":"东南风微风","temperature":"28 ~ 22℃"},{"date":"周六","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/zhongyu.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/yin.png","weather":"小到中雨转阴","wind":"东北风微风","temperature":"24 ~ 19℃"},{"date":"周日","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"西北风微风","temperature":"26 ~ 19℃"},{"date":"周一","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"南风微风","temperature":"29 ~ 21℃"}]}]}
把这段json串放入到网站http://www.bejson.com/中去,会得到比较规范的一个格式,在通过自己的解析到自己需要的部分:

以下是解析到的部分:

/**
 * 解析百度天气json数据
 * @param txt
 */
	public void parseJsonTxt(String txt) {
		try {
			JSONObject rootObj = new JSONObject(txt) ;
			if(0 != rootObj.getInt("error")) {
				Toast.makeText(MainActivity.this, "下载天气失败!", Toast.LENGTH_LONG).show() ;
				return ;
			}
			// 解析
			JSONArray resultArr = rootObj.getJSONArray("results") ; 
			JSONObject resultObj = resultArr.getJSONObject(0) ;
			String pm25 = resultObj.getString("pm25") ;
			// 获取洗车提示
			JSONArray indexArr = resultObj.getJSONArray("index") ;
			JSONObject carObj = indexArr.getJSONObject(1) ;
			String carDes = carObj.getString("des") ;
			// 获取天气数据
			JSONArray weatherArr = resultObj.getJSONArray("weather_data") ;
			JSONObject todayObj = weatherArr.getJSONObject(0) ;
			String todayStr = todayObj.getString("date") + "\n" + todayObj.getString("temperature") ;
			//
			tv.setText(
					"pm2.5:" + pm25 + "\n"
					+ "洗车建议:" + carDes + "\n"
					+ "今天天气:" + todayStr 
					) ;
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
以下是解析之后显示的效果:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值