json字符串:(这是在网上找的数据)
{
"error": 0,
"status": "success",
"date": "2014-05-10",
"results": [
{
"currentCity": "南京",
"weather_data": [
{
"date": "周六(今天, 实时:19℃)",
"dayPictureUrl": "http://api.map.baidu.com/images/weather/day/dayu.png",
"nightPictureUrl": "http://api.map.baidu.com/images/weather/night/dayu.png",
"weather": "大雨",
"wind": "东南风5-6级",
"temperature": "18℃"
},
{
"date": "周日",
"dayPictureUrl": "http://api.map.baidu.com/images/weather/day/zhenyu.png",
"nightPictureUrl": "http://api.map.baidu.com/images/weather/night/duoyun.png",
"weather": "阵雨转多云",
"wind": "西北风4-5级",
"temperature": "21 ~ 14℃"
}
]
}
]
}
然后将Json字符串放到Json在线工具的网页上,自动生成JavaBean如图:
我们只用weather里的数据,下面上代码:
public class WeatherData { //自动生成的 private String date; private String daypictureurl; private String nightpictureurl; private String weather; private String wind; private String temperature; public void setDate(String date) { this.date = date; } public String getDate() { return date; } public void setDaypictureurl(String daypictureurl) { this.daypictureurl = daypictureurl; } public String getDaypictureurl() { return daypictureurl; } public void setNightpictureurl(String nightpictureurl) { this.nightpictureurl = nightpictureurl; } public String getNightpictureurl() { return nightpictureurl; } public void setWeather(String weather) { this.weather = weather; } public String getWeather() { return weather; } public void setWind(String wind) { this.wind = wind; } public String getWind() { return wind; } public void setTemperature(String temperature) { this.temperature = temperature; } public String getTemperature() { return temperature; } }
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.List; /** * @Author:青松 * @Desc: * @Date: Create in 21:47 2018/6/4 * @Modified by : */ public class MainClass { public static void main(String[] args) { String StrJSon = "{\"error\":0,\"status\":\"success\",\"date\":\"2014-05-10\",\"results\":[{\"currentCity\":\"南京\",\"weather_data\":[{\"date\":\"周六(今天, 实时:19℃)\",\"dayPictureUrl\":\"http://api.map.baidu.com/images/weather/day/dayu.png\",\"nightPictureUrl\":\"http://api.map.baidu.com/images/weather/night/dayu.png\",\"weather\":\"大雨\",\"wind\":\"东南风5-6级\",\"temperature\":\"18℃\"},{\"date\":\"周日\",\"dayPictureUrl\":\"http://api.map.baidu.com/images/weather/day/zhenyu.png\",\"nightPictureUrl\":\"http://api.map.baidu.com/images/weather/night/duoyun.png\",\"weather\":\"阵雨转多云\",\"wind\":\"西北风4-5级\",\"temperature\":\"21 ~ 14℃\"}]}]}"; JSONObject jsonObject = JSON.parseObject(StrJSon); String resultsJson = jsonObject.getString("results"); System.out.println(resultsJson);//原数据是json数组,转换成JsonObject会报错误: String r2Json = resultsJson.substring(1, resultsJson.length()-1); System.out.println(r2Json);//sub后的json数组,可以转换成JsonObject JSONObject weatherJson = JSON.parseObject(r2Json); JSONArray weatherArray = (JSONArray) weatherJson.get("weather_data"); List<WeatherData> weatherData = weatherArray.toJavaList(WeatherData.class); int length = 0; length = weatherData.size(); if (weatherData!=null && length!=0){ for (int i = 0; i <length ; i++) { System.out.println(weatherData.get(i).getWeather()); } } } }
输出resultsJson:
[{"weather_data":[{"date":"周六(今天, 实时:19℃)","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/dayu.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/dayu.png","weather":"大雨","temperature":"18℃","wind":"东南风5-6级"},{"date":"周日","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/zhenyu.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/duoyun.png","weather":"阵雨转多云","temperature":"21 ~ 14℃","wind":"西北风4-5级"}],"currentCity":"南京"}]
输出r2Json:
{"weather_data":[{"date":"周六(今天, 实时:19℃)","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/dayu.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/dayu.png","weather":"大雨","temperature":"18℃","wind":"东南风5-6级"},{"date":"周日","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/zhenyu.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/duoyun.png","weather":"阵雨转多云","temperature":"21 ~ 14℃","wind":"西北风4-5级"}],"currentCity":"南京"}
第一个数json数组,第二个是json字符串
如果用第一种数据进行解析会报这样的错误:
Exception in thread "main" com.alibaba.fastjson.JSONException: can not cast to JSONObject. at com.alibaba.fastjson.JSON.parseObject(JSON.java:227) at TestJson.MainClass.main(MainClass.java:26) Caused by: java.lang.ClassCastException: com.alibaba.fastjson.JSONArray cannot be cast to com.alibaba.fastjson.JSONObject at com.alibaba.fastjson.JSON.parseObject(JSON.java:225) ... 1 more