Java下利用Jackson进行JSON解析,提取出部分数据不用全部写bean

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

猜你喜欢

转载自blog.csdn.net/qq_38553333/article/details/80583528