2012-11-02 44 views
1

好,我想从JSON中提取所需要的数据从开放的天气图数据的Python(2.7) API! JSON文件看起来像这样。Python的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/decder的方法?

+0

为什么你不能提取多个数据点?你尝试过什么,它是如何失败的?我非常怀疑这是一个JSON解码器问题。 –

+1

此外,当你说“看起来像这样”时,你是说你发布的代码*是JSON文件,还是你解码* JSON后得到的Python数据结构? (因为它不是JSON - 'u''是unicode字符串的Python语法,而不是JSON。) –

回答

3

你有什么不是JSON,它是一个Python对象,所以我假设你已经通过json.loads()或类似的东西传递了原始的JSON字符串。

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

names = [city['name'] for city in data['list']] 

结果:

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

的假定你有一个从您的文章中的内容变量data

+0

感谢您的快速回复和解决方案。 – Domagoj

1

我想添加到FJ的回答是,如果你想dynamicaly提取数据的特定城市,你可以做这样的事情:

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

谢谢这也很有用。 – Domagoj

0

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