阶段一:解析JSON
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阶段一:解析JSON相关的知识,希望对你有一定的参考价值。
“阶段一”是指我第一次系统地学习android开发。这主要是对我的学习过程作个记录。
最近学到解析JSON格式的网络数据,而作业也要求自己找一个天气预报的API地址,然后解析其中JSON格式的数据。可能是因为找的是免费的API地址,在百度APIStore里的,它那JSON返回示例的数据,跟我获取之后,打Log显示出来的有些差异,这只是吐槽一下哈。另外,推荐初学者到“聚合数据”这个网站看一下那里的示例代码,写得很规范,思路、注解都很清楚。
因为第一次做解析JSON,而且这个API的数据还蛮复杂,在解析、读取的时候,写着写着就蒙圈了。所以这次主要是分享一下,我是如何理解解析JSON的方法和怎样获取其中的数据,数据格式由简单到复杂。而其基本语法,可以查看百度百科,那里面讲得很详细。
以下分析,都是基于这个假设,请求的数据都转换为String类型,并保存在content变量中。
1、{"resultcode": "200", "reason": "查询成功!"}
这种情况最好理解,只要JSONObject response = new JSONObject(content)和String result = response.getString("resultcode");而我是这么理解的,一对花括号{}就代表一个对象,所以response是这条数据的JSONObject,当实现这个对象之后,就当作这个花括号{}被去除掉了,这么想得话,对于理解复杂的数据时或有帮助。当“值”的位置(即冒号后面的字符串)没有任何括号时,就可以调用get方法来取值。
2、{"resultcode": "200", "reason": "查询成功!", "future": [ { "temperature": "28℃~36℃", "weather": "晴转多云" } ] }
而当“值”的位置有方括号[]时(跟数组类似),就要用上一级的对象调用getJSONArray("future"),这里就是response,当执行了这一步,也可以当作把方括号去掉。方括号[]里,每一对花括号{}也代表一个对象,它也有下标,也是从0开始。
所以取temperature的代码是:
JSONObject response = new JSONObject(content);// ==> "resultcode": "200", "reason": "查询成功!", "future": [ { "temperature": "28℃~36℃", "weather": "晴转多云" } ]
JSONArray future= response.getJSONArray("future");// ==> { "temperature": "28℃~36℃", "weather": "晴转多云" }
JSONObject futureObject= future.getJSONObject(0);// ==> "temperature": "28℃~36℃", "weather": "晴转多云"
String temperature= futureObject.getString("temperature");
3、{ "resultcode": "200",
"reason": "查询成功!",
"today": { "city": "天津", "date_y": "2014年03月21日", "week": "星期五", "temperature": "8℃~20℃", "weather": "晴转霾", "weather_id": { "fa": "00", "fb": "53" } },
"future": [ { "temperature": "28℃~36℃", "weather": "晴转多云", "weather_id": { "fa": "00", "fb": "01" }, "wind": "南风3-4级", "week": "星期一", "date": "20140804" },
{ "temperature": "28℃~36℃", "weather": "晴转多云", "weather_id": { "fa": "00", "fb": "01" }, "wind": "东南风3-4级", "week": "星期二", "date": "20140805" }
]
}
(1)读"today"里的"city"
JSONObject response = new JSONObject(content);// ==>同上
JSONObject today= reponse.getJSONObject("today");// ==> "city": "天津", "date_y": "2014年03月21日", "week": "星期五", "temperature": "8℃~20℃", "weather": "晴转霾", "weather_id": { "fa": "00", "fb": "53" }
String city= today.getString("city");
(2)读"future"的第二个"temperature"的"weather_id"的"fa"
JSONObject response = new JSONObject(content);// ==>同上
JSONArray future= response.getJSONArray("future");
JSONObject futureObject= future.getJSONObject(1);// ==> "temperature": "28℃~36℃", "weather": "晴转多云", "weather_id": { "fa": "00", "fb": "01" }, "wind": "东南风3-4级", "week": "星期二", "date": "20140805"
JSONObject weather_id= futureObject.getJSONObject("weather_id");// ==> "fa": "00", "fb": "01"
String id= weather_id.getString("fa");
总结:对于解析JSON,我是把它理解成是一个不断去括号的过程。先找到你要获取的数据,然后从最外层开始,一层层的剥。有花括号{}的就getJSONObect(除最外层的,最外层的是new JSONObject,这也是第一步要做的),有方括号[]的就getJSONArray。直到“值”的位置没有任何括号时,就能读取数据了。。
以上是关于阶段一:解析JSON的主要内容,如果未能解决你的问题,请参考以下文章