好的我正在尝试从 Python(2.7)中的开放天气图 API中的 JSON 数据中提取所需数据! JSON文件看起来像这样。
{u'calctime': 0.0331,
u'cnt': 2,
u'cod': u'200',
u'list': [{u'clouds': {u'all': 75},
u'coord': {u'lat': 45.551109, u'lon': 18.69389},
u'distance': 0.001,
u'dt': 1351870200,
u'id': 3193935,
u'main': {u'humidity': 93,
u'pressure': 1008,
u'temp': 287.15,
u'temp_max': 291.18,
u'temp_min': 287.15},
u'name': u'Osijek',
u'weather': [{u'description': u'broken clouds',
u'icon': u'04d',
u'id': 803,
u'main': u'Clouds'}],
u'wind': {u'deg': 70, u'speed': 4.6}},
{u'clouds': {u'all': 75},
u'coord': {u'lat': 45.568611, u'lon': 18.61389},
u'distance': 6.526,
u'dt': 1351870200,
u'id': 3187657,
u'main': {u'humidity': 93,
u'pressure': 1008,
u'temp': 285.43,
u'temp_max': 287.15,
u'temp_min': 282.15},
u'name': u'Visnjevac',
u'weather': [{u'description': u'light intensity shower rain',
u'icon': u'09d',
u'id': 520,
u'main': u'Rain'}],
u'wind': {u'deg': 70, u'speed': 4.6}}],
u'message': u'Model=GFS-OWM, '}
这是两个地理点的天气数据。我知道如何通过使用json包从两个点(例如湿度或温度)中提取单个数据,但问题是我无法从不同的地理点提取相同类型的多个数据。在这个例子中,我想提取/打印这些点的名称(osijek,visnjevac)。
有没有办法用json编码器/解码器?
答案 0 :(得分:3)
你拥有的不是JSON,它是一个Python对象,所以我假设你已经通过json.loads()
或类似的东西传递了原始的JSON字符串。
要提取城市列表中每个字典的'name'
值,您可以使用以下内容:
names = [city['name'] for city in data['list']]
结果:
>>> names
[u'Osijek', u'Visnjevac']
假设您在变量data
中拥有帖子中的内容。
答案 1 :(得分:1)
我想补充说F.J的回答是,如果你想动态提取特定城市的数据,你可以这样做:
cities = ['osijek', 'visnjevac']
cities_data = filter(lambda i: i['name'].lower() in cities, data['list'])
答案 2 :(得分:0)
您可能会发现我的GitHub Python项目PyOWM很有用,它是一个简单的面向对象的客户端包装器,围绕Open Weather Map Web API。