public static String toJSONArrayStr(ArrayList<THotelData> hotels) throws Exception {
   JSONArray jsonHotels = new JSONArray();
   for (THotelData hotel : hotels) {
     jsonHotels.put(hotel.toJSON());
   }
   return jsonHotels.toString(2);
 }
  public static void saveHotelsData(String fileName, ArrayList<THotelData> hotels)
      throws Exception {

    String jsonData = THotelData.toJSONArrayStr(hotels).toString();
    FileWriter fw = new FileWriter(fileName);
    fw.write(jsonData);
    fw.close();
  }
  public static ArrayList<THotelData> loadHotelsData(String fileName) throws Exception {

    File fin = new File(fileName);
    FileReader fr = new FileReader(fin);
    char buffer[] = new char[(int) fin.length()];
    fr.read(buffer);
    String jsonData = new String(buffer);
    fr.close();

    ArrayList<THotelData> hotels = THotelData.fromJSONArrayStr(jsonData);
    return hotels;
  }
 public static ArrayList<THotelData> fromJSONArrayStr(String jsonHotelsStr) throws Exception {
   ArrayList<THotelData> hotels = null;
   JSONArray jsonHotels = new JSONArray(jsonHotelsStr);
   if (jsonHotels.length() > 0) {
     hotels = new ArrayList<THotelData>();
     for (int n = 0; n < jsonHotels.length(); n++) {
       THotelData hotel = THotelData.fromJSON((JSONObject) jsonHotels.get(n));
       hotels.add(hotel);
     }
   }
   return hotels;
 }
  public static THotelData fromJSON(JSONObject jsonObj) throws Exception {

    THotelData hotel = new THotelData();
    hotel.avgRating = jsonObj.getDouble("avgRating");
    hotel.distance = jsonObj.getDouble("distance");
    hotel.address = jsonObj.getString("address");
    hotel.lat = jsonObj.getDouble("lat");
    hotel.lng = jsonObj.getDouble("lng");
    hotel.name = jsonObj.getString("name");
    hotel.stars = jsonObj.getInt("stars");
    hotel.votes = jsonObj.getInt("votes");
    hotel.dataLink = jsonObj.getString("dataLink");
    JSONArray hRooms = jsonObj.getJSONArray("rooms");
    if (hRooms.length() > 0) {
      hotel.rooms = new ArrayList<TRoomData>();
      for (int n = 0; n < hRooms.length(); n++) {
        TRoomData room = TRoomData.fromJSON(hotel, (JSONObject) hRooms.get(n));
        hotel.rooms.add(room);
      }
    }

    hotel.cancelable = jsonObj.getBoolean("cancelable");
    hotel.withBreakfast = jsonObj.getBoolean("withBreakfast");
    hotel.ranking = jsonObj.getInt("ranking");
    hotel.avgDayPrice = jsonObj.getDouble("avgDayPrice");
    hotel.avgPrice = jsonObj.getDouble("avgPrice");
    hotel.avgCalculatedPrice = jsonObj.getDouble("avgCalculatedPrice");

    return hotel;
  }