Python: OpenWeatherMap json Deserialization of Python Objects
openweathermap.json
{ "coord": { "lon": 114.0683, "lat":22.5455 } , "weather":[ { "id": 803, "main":"Clouds", "description":"多云", "icon":"04d" } ], "base":"stations", "main": { "temp": 299.1, "feels_like":299.1, "temp_min":296.39, "temp_max":300.29, "pressure":1018, "humidity":79, "sea_level":1018, "grnd_level":1017 } , "visibility":10000, "wind": { "speed": 2.73, "deg":137, "gust":3.32 } , "clouds": { "all": 82 } , "dt":1702530001, "sys": { "type": 2, "id":2031340, "country":"CN", "sunrise":1702508106, "sunset":1702546869 } , "timezone":28800, "id":1795565, "name":"Shenzhen", "cod":200 }
# encoding: utf-8 # 版权所有 2023 涂聚文有限公司 # 许可信息查看: # 描述: # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 3.11 # Datetime : 2023/12/14 22:14 # User : geovindu # Product : PyCharm # Project : pyBaiduAi # File : Clouds.py # explain : 学习 import json import pickle from typing import List from typing import Any from dataclasses import dataclass @dataclass class Clouds: all: int @staticmethod def from_dict(obj: Any) -> 'Clouds': _all = int(obj.get("all")) return Clouds(_all) @dataclass class Coord: lon: float """ 经度 """ lat: float """ 纬度 """ @staticmethod def from_dict(obj: Any) -> 'Coord': _lon = float(obj.get("lon")) _lat = float(obj.get("lat")) return Coord(_lon, _lat) @dataclass class Main: """ """ temp: float """ 温度 """ feels_like: float temp_min: float """ 最低温 """ temp_max: float """ 最高温 """ pressure: int humidity: int """ 湿魔 """ sea_level: int grnd_level: int @staticmethod def from_dict(obj: Any) -> 'Main': _temp = float(obj.get("temp")) _feels_like = float(obj.get("feels_like")) _temp_min = float(obj.get("temp_min")) _temp_max = float(obj.get("temp_max")) _pressure = int(obj.get("pressure")) _humidity = int(obj.get("humidity")) _sea_level = int(obj.get("sea_level")) _grnd_level = int(obj.get("grnd_level")) return Main(_temp, _feels_like, _temp_min, _temp_max, _pressure, _humidity, _sea_level, _grnd_level) @dataclass class Sys: """ 系统信息 """ type: int id: int country: str """ 所属国家 """ sunrise: int """ 日出时间戳 """ sunset: int """ 日落时间戳 """ @staticmethod def from_dict(obj: Any) -> 'Sys': _type = int(obj.get("type")) _id = int(obj.get("id")) _country = str(obj.get("country")) _sunrise = int(obj.get("sunrise")) _sunset = int(obj.get("sunset")) return Sys(_type, _id, _country, _sunrise, _sunset) @dataclass class Weather: """ 天气情况 """ id: int main: str description: str """ 天气 """ icon: str """ 图标ID """ @staticmethod def from_dict(obj: Any) -> 'Weather': _id = int(obj.get("id")) _main = str(obj.get("main")) _description = str(obj.get("description")) _icon = str(obj.get("icon")) return Weather(_id, _main, _description, _icon) @dataclass class Wind: """ 风况 """ speed: float """ 风速 """ deg: int gust: float @staticmethod def from_dict(obj: Any) -> 'Wind': _speed = float(obj.get("speed")) _deg = int(obj.get("deg")) _gust = float(obj.get("gust")) return Wind(_speed, _deg, _gust) @dataclass class OpenWeather: """" 天气类 """ coord: Coord weather: List[Weather] base: str main: Main visibility: int wind: Wind clouds: Clouds dt: int sys: Sys timezone: int id: int name: str cod: int @staticmethod def from_dict(obj: Any) -> 'OpenWeather': _coord = Coord.from_dict(obj.get("coord")) _weather = [Weather.from_dict(y) for y in obj.get("weather")] _base = str(obj.get("base")) _main = Main.from_dict(obj.get("main")) _visibility = int(obj.get("visibility")) _wind = Wind.from_dict(obj.get("wind")) _clouds = Clouds.from_dict(obj.get("clouds")) _dt = int(obj.get("dt")) _sys = Sys.from_dict(obj.get("sys")) _timezone = int(obj.get("timezone")) _id = int(obj.get("id")) _name = str(obj.get("name")) _cod = int(obj.get("cod")) return OpenWeather(_coord, _weather, _base, _main, _visibility, _wind, _clouds, _dt, _sys, _timezone, _id, _name, _cod)
# encoding: utf-8 # 版权所有 2023 ©涂聚文有限公司 # 许可信息查看: # 描述: # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 311 # Datetime : 2023/12/15 8:13 # User : geovindu # Product : PyCharm # Project : EssentialAlgorithms # File : DateTimeHelper.py # explain : 学习 import time import datetime class TimeHelper(object): """ 时间转换 """ @staticmethod def gettime(timeStamp:int): """ 时间戳转成日期时间 :param timeStamp: :return: """ timeArray = time.localtime(timeStamp) #timeArray = datetime.datetime.utcfromtimestamp(timeStamp) #beikingStyleTime =datetime.datetime.utcfromtimestamp(timeStamp)# time.strftime("%Y-%m-%d %H:%M:%S", timeArray) #beijing_timezone = datetime.timezone(datetime.timedelta(hours=8)) #beikingStyleTime = utc_time.astimezone(beijing_timezone) beikingStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray) return beikingStyleTime @staticmethod def getTimeStamp(nowdatetime:datetime.datetime): """ 由 datetime对象 转换为 时间戳 :param nowdatetime :return: """ year=nowdatetime.year month=nowdatetime.month day=nowdatetime.day hour=nowdatetime.hour minute=nowdatetime.minute seconde=nowdatetime.second timeArray = nowdatetime.strftime("%Y-%m-%d %H:%M:%S") #'2023-12-31 09:30:18' timeStamp = time.mktime(timeArray) return timeStamp @staticmethod def getDateTime(timeStamp:int): """ 时间戳转成日期时间 :param timeStamp: :return: """ #无效 #dateArray = datetime.datetime.utcfromtimestamp(timeStamp) #beikingStyleTime = dateArray.strftime("%Y-%m-%d %H:%M:%S") beikingStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timeStamp)) return beikingStyleTime @staticmethod def getDateTimeStamp(nowdatetime: datetime.datetime): """ 由 datetime对象 转换为 时间戳 :param nowdatetime :return: """ year = nowdatetime.year month = nowdatetime.month day = nowdatetime.day hour = nowdatetime.hour minute = nowdatetime.minute seconde = nowdatetime.second dateArray = datetime.datetime(year=year, month=month, day=day, hour=hour, minute=minute, second=seconde) timeStamp = dateArray.timestamp() return timeStamp @staticmethod def getFTC(ff: float): """ 华氏度转摄氏度 摄氏度(℃)、华氏度(℉)、开氏度(K)、列氏度(°Re)、兰氏度(°R)温度单位数据 :param ff: :return: """ temperature = str(round(((ff - 32) / 1.8000), 2))+'℃' return temperature @staticmethod def getKTC(kk: float): """ 开尔文转摄氏度 :param kk: :return: """ temperature = str(round((kk - 273.15), 2))+'℃' return temperature
调用:
import Common.DateTimeHelper import Model.Clouds import Model.openWeatherMapInfo import Common.LanguageList import BLL.OpenWeatherMap import requests def print_hi(name): # Use a breakpoint in the code line below to debug your script. print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint. # Press the green button in the gutter to run the script. if __name__ == '__main__': print_hi('PyCharm,python,geovindu,Geovin Du,涂聚文,你好!') bll=BLL.OpenWeatherMap.openWeatherMap() dtime = Common.DateTimeHelper #ob = bll.getObject("1795565") geovindu=bll.getObject("1795565",Common.LanguageList.Lang.zh_cn.name) print("ob",geovindu) print("城市:", geovindu.name) print("湿度", str(geovindu.main.humidity) + '%') print("天气:", geovindu.weather[0].description) print("日出:", dtime.TimeHelper.getDateTime(geovindu.sys.sunrise)) print("日落:", dtime.TimeHelper.getDateTime(geovindu.sys.sunset)) print("温度:", dtime.TimeHelper.getKTC(geovindu.main.temp)) print("最低温度:", dtime.TimeHelper.getKTC(geovindu.main.temp_min)) print("最高温度:", dtime.TimeHelper.getKTC(geovindu.main.temp_max)) # deserialization process: with open('openweathermap.json', encoding='utf-8') as json_file: data = json.load(json_file) print("data from file:") print(type(data)) root = Model.Clouds.OpenWeather.from_dict(data) print(root) print("城市:", root.name) print("湿度", str(root.main.humidity)+'%') print("天气:", root.weather[0].description) #1. #print("日出:", dtime.TimeHelper.gettime(root.sys.sunrise)) #print("日落:", dtime.TimeHelper.gettime(root.sys.sunset)) #2. print("日出:", dtime.TimeHelper.getDateTime(root.sys.sunrise)) print("日落:", dtime.TimeHelper.getDateTime(root.sys.sunset)) print("温度:",dtime.TimeHelper.getKTC(root.main.temp)) print("最低温度:", dtime.TimeHelper.getKTC(root.main.temp_min)) print("最高温度:", dtime.TimeHelper.getKTC(root.main.temp_max))
输出
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)