如何从JSON输出中提取特定数据?

时间:2019-05-14 21:44:19

标签: python json api web flash-message

我一直在使用flask和python开发一个简单的天气Web应用程序。

我的main.py文件中包含的一条路线是天气路线。它具有一个调用weather api的功能,并输出json输出。

我的问题是从json输出中拉出特定数据。输出结果如下:

{'base': 'stations',
 'clouds': {'all': 90},
 'cod': 200,
 'coord': {'lat': 40.73, 'lon': -73.99},
 'dt': 1557824237,
 'id': 5128581,
 'main': {'humidity': 93,
          'pressure': 1009,
          'temp': 43.93,
          'temp_max': 46,
          'temp_min': 42.01},
 'name': 'New York',
 'sys': {'country': 'US',
         'id': 4026,
         'message': 0.0144,
         'sunrise': 1557826807,
         'sunset': 1557878678,
         'type': 1},
 'visibility': 12874,
 'weather': [{'description': 'mist', 'icon': '50n', 'id': 701, 'main': 'Mist'},
             {'description': 'light intensity drizzle',
              'icon': '09n',
              'id': 300,
              'main': 'Drizzle'}],
 'wind': {'deg': 20, 'speed': 8.05}}

我使用pprint使其更具可读性。我想要做的是通过创建python字典来提取“描述”数据。

weather = {
    'city': city,
    'temperature': r['main']['temp'],
    'description': r['weather'][1]['description'],
    'icon': r['weather'][1]['icon'],
    }

当我打印天气时,我希望它能打印出description: light intensity drizzleicon: 09nid:300,但出现关键错误。当我使用“ 0”而不是“ 1”时,没有出现关键错误,但是我试图提取第二个描述数据,而不是第一个。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

尝试调用weather键,然后使用索引进入列表,然后获取所需的项目。

data = {'base': 'stations',
 'clouds': {'all': 90},
 'cod': 200,
 'coord': {'lat': 40.73, 'lon': -73.99},
 'dt': 1557824237,
 'id': 5128581,
 'main': {'humidity': 93,
          'pressure': 1009,
          'temp': 43.93,
          'temp_max': 46,
          'temp_min': 42.01},
 'name': 'New York',
 'sys': {'country': 'US',
         'id': 4026,
         'message': 0.0144,
         'sunrise': 1557826807,
         'sunset': 1557878678,
         'type': 1},
 'visibility': 12874,
 'weather': [{'description': 'mist', 'icon': '50n', 'id': 701, 'main': 'Mist'},
             {'description': 'light intensity drizzle',
              'icon': '09n',
              'id': 300,
              'main': 'Drizzle'}],
 'wind': {'deg': 20, 'speed': 8.05}}


print(data.get('weather')[0].get('description'))
print(data.get('weather')[0].get('icon'))
print(data.get('weather')[0].get('id'))