2016-05-02 134 views
2

我讀的JSON以下嵌套詞典列表從API迭代通過列表的蟒蛇

{ 
"result": [{ 
       "short_description": "I am getting bluescreen error", 
       "sys_id": "39b5f8c2376ede007520021a54990e5c", 
       "opened_at": "2016-04-04 05:19:53", 
       "number":"INC0258523" 
      }, 
      { 
       "short_description": "laptop crashed with a blue screen", 
       "sys_id": "da0095380f43d200a4f941fce1050eeb", 
       "opened_at":"2016-04-25 06:33:52", 
       "number":"INC0259067" 
      }, 
      { 
       "short_description": "Laptop not booting", 
       "sys_id": "ecf9c9b00f43d200a4f941fce1050e17", 
       "opened_at": "2016-04-25 06:07:16", 
       "number": "INC0259061" 
      }] 
} 

我需要篩選基於兩個距離和兩個日期的數據。 opened_at是包含日期信息的值。

我嘗試迄今如下

url = "http://ip:port/api" 

    response = urllib.urlopen(url) 
    data = json.loads(response.read()) 
    print type(data) 
    pattern = 'opened_at' 
    element = '2016-04-25 06:33:19' 
    with open('D:/Output.csv', 'wb') as f: 
     w = csv.DictWriter(f, data['result'][0].keys()) 
     w.writeheader() 
     print type(data['result']) 
     for key in data['result']: 
      for v, val in data['result'].items(): 
       if v == pattern and val == element: 
        w.writerow(v) 

我得到下面的錯誤上運行的代碼

AttributeError: 'list' object has no attribute 'items' 

我知道數據的類型[「結果」]是一個列表。任何幫助將不勝感激。謝謝!

+0

給出一些必要的輸出,會更容易... –

+0

輸出應該是一個csv文件,其內容僅在兩個特定日期之間。假設我給04-04-2016,那麼csv文件應該包含僅在04-04-2016發佈的記錄。 –

回答

4

data['result']是字典列表,你應該遍歷它喜歡如下:

for d in data['result']: 
    for k, v in d.items(): 
+0

對不起,但我沒有從它得到所需的輸出。沒有什麼會寫入輸出文件。 –

+0

你確定你的元素變量包含一個存在於你的json中的值嗎?在你的例子中情況並非如此。 – mvelay

1

你需要這個

import json 
al = """ 
{ 
"result": [{ 
       "short_description": "I am getting bluescreen error", 
       "sys_id": "39b5f8c2376ede007520021a54990e5c", 
       "opened_at": "2016-04-04 05:19:53", 
       "number":"INC0258523" 
      }, 
      { 
       "short_description": "laptop crashed with a blue screen", 
       "sys_id": "da0095380f43d200a4f941fce1050eeb", 
       "opened_at":"2016-04-25 06:33:52", 
       "number":"INC0259067" 
      }, 
      { 
       "short_description": "Laptop not booting", 
       "sys_id": "ecf9c9b00f43d200a4f941fce1050e17", 
       "opened_at": "2016-04-25 06:07:16", 
       "number": "INC0259061" 
      }] 
} 
""" 
myjson = json.loads(al) 
for val in myjson['result']: 
    print val['opened_at'] 
    for key, value in val.items():#change it to keys if required 
+1

這就是我在5分鐘前發佈的內容,除了您將OP變量重命名爲... – mvelay

0

其實 「結果」 是一個dictionnary。您可以通過它圈出的「{」和「}」來識別Python中的一個詞典。 所以這裏是一個詞典列表的詞典!