Python JSON格式化数据管理

Python JSON格式化数据管理,python,json,weather-api,Python,Json,Weather Api,我正试图从Python(2.7)中的开放天气图API中提取所需数据! 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': 1351

我正试图从Python(2.7)中的开放天气图API中提取所需数据! 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 encoder/Decoder有办法做到这一点吗?

您拥有的不是json,而是一个Python对象,因此我假设您已经通过
json.loads()
或类似的方式传递了原始json字符串

要提取城市列表中每个字典的
'name'
值,可以使用以下命令:

names = [city['name'] for city in data['list']]
结果:

>>> names
[u'Osijek', u'Visnjevac']

假设您在变量
data

中有帖子的内容,您拥有的不是JSON,而是一个Python对象,因此我假设您已经通过
JSON.loads()
或类似的方式传递了原始JSON字符串

要提取城市列表中每个字典的
'name'
值,可以使用以下命令:

names = [city['name'] for city in data['list']]
结果:

>>> names
[u'Osijek', u'Visnjevac']

假设您在变量
data

中有您帖子的内容,我想补充F.J的回答,如果您想动态提取特定城市的数据,您可以这样做:

cities = ['osijek', 'visnjevac']
cities_data = filter(lambda i: i['name'].lower() in cities, data['list'])

我想补充F.J的回答,如果你想动态提取特定城市的数据,你可以这样做:

cities = ['osijek', 'visnjevac']
cities_data = filter(lambda i: i['name'].lower() in cities, data['list'])

您可能会发现my GitHub Python项目很有用,它是一个围绕开放天气图web API的简单面向对象的客户端包装。

您可能会发现my GitHub Python项目很有用,它是一个围绕开放天气图web API的简单面向对象的客户端包装。

为什么不能提取多个数据点?你试过什么,怎么会失败?我非常怀疑这是JSON解码器的问题。另外,当你说“看起来像这样”时,你是说你发布的代码是JSON文件,还是解码JSON后得到的Python数据结构?(因为它不是JSON--u''是unicode字符串的Python语法,而不是JSON。)为什么不能提取多个数据点?你试过什么,怎么会失败?我非常怀疑这是JSON解码器的问题。另外,当你说“看起来像这样”时,你是说你发布的代码是JSON文件,还是解码JSON后得到的Python数据结构?(因为它不是JSON--u''是unicode字符串的Python语法,而不是JSON。)感谢您的快速回复和解决方案。感谢您的快速回复和解决方案。