public List<Weather> parseForecast(String rawJsonData) throws JsonParseException {

    List<Weather> forecast = null;

    if ("".equals(rawJsonData) || rawJsonData == null) return Collections.emptyList();

    try {
      JSONObject jsonObject = new JSONObject(rawJsonData);
      JSONObject jCity = jsonObject.getJSONObject("city");
      JSONArray jList = jsonObject.getJSONArray("list");

      String name = jCity.getString("name");
      int cityId = jCity.getInt("id");
      String country = jCity.getString("country");
      City city = new City(cityId, name, country);

      forecast = new ArrayList<>();
      for (int i = 0; i < jList.length(); i++) {
        JSONObject jForecastItem = jList.getJSONObject(i);
        long time = jForecastItem.getLong("dt");
        JSONObject jWeather = jForecastItem.getJSONArray("weather").getJSONObject(0);
        int weatherId = jWeather.getInt("id");
        String description = jWeather.getString("description");

        Weather weather = new Weather(weatherId, description, time);

        JSONObject jWind = jForecastItem.getJSONObject("wind");
        double windSpeed = jWind.getDouble("speed");
        double windDegree = jWind.getDouble("deg");
        Wind wind = new Wind(windDegree, windSpeed);

        JSONObject jMain = jForecastItem.getJSONObject("main");
        double temperature = jMain.getDouble("temp");
        double pressure = jMain.getDouble("pressure");
        double humidity = jMain.getDouble("humidity");
        WeatherCondition condition = new WeatherCondition(temperature, pressure, humidity);

        weather.setCondition(condition).setWind(wind).setCity(city);

        forecast.add(weather);
      }
    } catch (JSONException e) {
      Log.e(LOG_TAG, "Parsing error.", e);
    }
    return (forecast == null) ? Collections.<Weather>emptyList() : forecast;
  }
  public Weather parseWeather(String jsonData) throws JsonParseException {
    Weather weather;
    if ("".equals(jsonData)) return null;
    try {
      JSONObject jsonObject = new JSONObject(jsonData);
      JSONObject sys = jsonObject.getJSONObject("sys");
      JSONObject main = jsonObject.getJSONObject("main");
      JSONObject windj = jsonObject.getJSONObject("wind");
      JSONObject weatherObj = jsonObject.getJSONArray("weather").getJSONObject(0);
      String name = jsonObject.getString("name");

      int cityId = jsonObject.getInt("id");
      String cityCountry = sys.getString("country");
      City city = new City(cityId, name, cityCountry);

      double windSpeed = windj.getDouble("speed");
      double windDegree = windj.optDouble("deg", -1d);
      Wind wind = new Wind(windDegree, windSpeed);

      double temperature = main.getDouble("temp");
      double pressure = main.getDouble("pressure");
      double humidity = main.getDouble("humidity");
      WeatherCondition condition = new WeatherCondition(temperature, pressure, humidity);

      long sunrise = sys.getLong("sunrise");
      long sunset = sys.getLong("sunset");
      AdditionalInfo info = new AdditionalInfo(sunrise, sunset);

      int weatherId = weatherObj.getInt("id");
      String description = weatherObj.getString("description");
      weather = new Weather(weatherId, description, new Date().getTime() / 1000);
      weather.setCity(city).setCondition(condition).setInfo(info).setWind(wind);
    } catch (JSONException e) {
      Log.e(LOG_TAG, "Parsing error!", e);
      throw new JsonParseException("Exception during parsing!", e);
    }
    return weather;
  }