JSON数据解析

来源:互联网 发布:骚气的诗词 知乎 编辑:程序博客网 时间:2024/04/30 23:33

进行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 blocke.printStackTrace();}}
以下是解析之后显示的效果:







0 0