当前位置:嗨网首页>书籍在线阅读

20-第3步_加载JSON数据并输出天气

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

第3步:加载JSON数据并输出天气

response.text 成员变量保存了一个JSON格式数据的大字符串。要将它转换为Python值,就调用 json.loads() 函数。JSON数据会像这样:

{'city': {'coord': {'lat': 37.7771, 'lon': -122.42},
          'country': 'United States of America',
          'id': '5391959',
          'name': 'San Francisco',
          'population':  0},
 'cnt': 3,
 'cod': '200',
 'list': [{'clouds': 0,
           'deg': 233,
           'dt': 1402344000,
           'humidity': 58,
           'pressure': 1012.23,
           'speed': 1.96,
           'temp': {'day': 302.29,
                    'eve': 296.46,
                    'max': 302.29,
                    'min': 289.77,
                    'morn': 294.59,
                    'night': 289.77},
           'weather': [{'description': 'sky is clear',
                        'icon': '01d',
--snip--

可以将 weatherData 传入 pprint.pprint() 以查看这个数据。你可能要进入OpenWeather官网,找到关于这些字段含义的文档。例如,在线文档会告诉你, 'day' 后面的 302.29 是白天的开尔文温度,而不是摄氏或华氏温度。

你想要的天气描述在 'main''description' 之后。为了输出整齐,在getOpenWeather.py中添加以下代码:

   ! python3
   # getOpenWeather.py - Prints the weather for a location from the command line.
   --snip--
   # Load JSON data into a Python variable.
   weatherData = json.loads(response.text)
   # Print weather descriptions.
❶  w = weatherData['list']
   print('Current weather in %s:' % (location)) 
   print(w[0]['weather'][0]['main'], '-', w[0]['weather'][0]['description']) 
   print()
   print('Tomorrow:')
   print(w[1]['weather'][0]['main'], '-', w[1]['weather'][0]['description']) 
   print()
   print('Day after tomorrow:')
   print(w[2]['weather'][0]['main'], '-', w[2]['weather'][0]['description'])

请注意,代码将 weatherData['list'] 保存在变量 w 中,这将节省一些打字时间❶。可以用 w[0]w[1]w[2] 来取得今天、明天和后天天气的字典。这些字典都有 'weather' 键,其中包含一个列表值。你感兴趣的是第一个表项(一个嵌套的字典,包含几个键),其索引是0。这里,我们输出保存在 'main''description' 键中的值,用连字符隔开。

如果用命令行参数 getOpenWeather.py San Francisco, CA 运行这个程序,那么输出结果看起来是这样的:

Current weather in San Francisco, CA: 
Clear - sky is clear
Tomorrow:
Clouds - few clouds
Day after tomorrow:
Clear - sky is clear

(天气是我喜欢住在旧金山的原因之一!)