最近在做自己的App时,要在主界面上添加简单的天气信息显示,然后就理所当然的跑到百度查找如何才能获取到天气信息,最后决定采用第三方天气信息服务商提供的数据,在看第三方提供的API说明时发现,获取到的天气数据是Json格式的,需要自己解析。又是经过一番百度,最后确定使用Google提供的Gson库来解析Json数据。
这里不讲为什么,只通过一个例子展现Gson解析Json数据的过程。
使用的编辑器为Android Studio,首先给自己的项添加Gson库,并且给Android Studio安装GsonFormat插件。
dependencies {
compile 'com.google.code.gson:gson:2.8.2'
}
先展示下要解析的Json数据:
这个Json数据总共分为三层
- 第一层:error / status / date / results
- 第二层:results中又分为 currentCity / weather_data
- 第三层:weather_data中又分为 date / weather / wind / temperature
具体数据如下:
{
"error": 0,
"status": "success",
"date": "2017-11-25",
"results": [
{
"currentCity": "杭州",
"weather_data": [
{
"date": "周六(今天, 实时:19℃)",
"weather": "大雨",
"wind": "东南风5-6级",
"temperature": "18℃"
},
{
"date": "周日",
"weather": "阵雨转多云",
"wind": "西北风4-5级",
"temperature": "21 ~ 14℃"
}
]
}
]
}
在项目中新建一个类Test_Weather.java,这里直接使用GsonFormat插件生成代码,如下:
package com.************.server.MyClass;
import java.util.List;
public class Test_Weather {
/**
* error : 0
* status : success
* date : 2017-11-25
* results : [{"currentCity":"杭州","weather_data":[{"date":"周六(今天, 实时:19℃)","weather":"大雨","wind":"东南风5-6级","temperature":"18℃"},{"date":"周日","weather":"阵雨转多云","wind":"西北风4-5级","temperature":"21 ~ 14℃"}]}]
*/
private int error;
private String status;
private String date;
private List results;
public int getError() {
return error;
}
public void setError(int error) {
this.error = error;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public List getResults() {
return results;
}
public void setResults(List results) {
this.results = results;
}
public static class ResultsBean {
/**
* currentCity : 杭州
* weather_data : [{"date":"周六(今天, 实时:19℃)","weather":"大雨","wind":"东南风5-6级","temperature":"18℃"},{"date":"周日","weather":"阵雨转多云","wind":"西北风4-5级","temperature":"21 ~ 14℃"}]
*/
private String currentCity;
private List weather_data;
public String getCurrentCity() {
return currentCity;
}
public void setCurrentCity(String currentCity) {
this.currentCity = currentCity;
}
public List getWeather_data() {
return weather_data;
}
public void setWeather_data(List weather_data) {
this.weather_data = weather_data;
}
public static class WeatherDataBean {
/**
* date : 周六(今天, 实时:19℃)
* weather : 大雨
* wind : 东南风5-6级
* temperature : 18℃
*/
private String date;
private String weather;
private String wind;
private String temperature;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getWeather() {
return weather;
}
public void setWeather(String weather) {
this.weather = weather;
}
public String getWind() {
return wind;
}
public void setWind(String wind) {
this.wind = wind;
}
public String getTemperature() {
return temperature;
}
public void setTemperature(String temperature) {
this.temperature = temperature;
}
}
}
}
然后准备使用Gson解析,前面准备的天气信息。这里是在Activity中使用的。
private void parseJsonWithGson_demo(String jsonData) {
// 初始化GSON
Gson gson = new Gson();
// 使用Gson提供的fromJson将String格式的Json数据转为对象
Test_Weather weather = gson.fromJson(jsonData, Test_Weather.class);
// 解析出第一层的数据
Log.d("Tag", "error: " + weather.getError());
Log.d("Tag", "status: " + weather.getStatus());
Log.d("Tag", "date: " + weather.getDate());
// 解析"results":[]中的第二层数据,因为是数组,获取的对象要用用List<>声明
List results = weather.getResults();
// 遍历"results":[]中的所有元素
for (Test_Weather.ResultsBean res : results) {
// 直接获取第二层数据
Log.d("Tag", "CurrentCity: " + res.getCurrentCity());
// 解析"weather_data":[]中的第三层数据,因为是数组,获取的对象要用用List<>声明
List weatherDataBeans = res.getWeather_data();
// 遍历"weather_data":[]中的所有元素
for (Test_Weather.ResultsBean.WeatherDataBean wea : weatherDataBeans) {
// 直接获取第三层数据
Log.d("Tag", "date: " + wea.getDate());
Log.d("Tag", "weather: " + wea.getWeather());
Log.d("Tag", "wind: " + wea.getWind());
Log.d("Tag", "temperature: " + wea.getTemperature());
}
}
}
找个地方调用方法 parseJsonWithGson(“这里传入上面给出的Json格式的数据”);
在控制台中可以看到解析出来的数据。