2017-05-25 48 views
-1

我試圖寫一些JSON輸出到CSV文件中,但首先我想了解數據是如何構成的。我正在從一個連接到API的示例腳本開始工作,並根據指定的查詢來拉取數據。Python 3的JSON /詞典的幫助,不知道如何解析值?

response = api_client.get_search_results(search_id, 'application/json') 
body = response.read().decode('utf-8') 
body_json = json.loads(body) 

如果我執行

print(body_json.keys()) 

我得到下面的輸出:

dict_keys(['events']) 
從這個

所以是

的JSON是從服務器與此查詢返回假設我真正感興趣的條目是事件字典中的另一個詞典? 如果是這樣我怎麼能'訪問'他們?

樣品JSON數據以上

{ 
    "events":[ 
    { 
     "source_ip":"10.143.223.172", 
     "dest_ip":"104.20.251.41", 
     "domain":"www.theregister.co.uk", 
     "Domain Path":"NULL", 
     "Domain Query":"NULL", 
     "Http Method":"GET", 
     "Protocol":"HTTP", 
     "Category":"NULL", 
     "FullURL":"http://www.theregister.co.uk" 
    }, 
    { 
     "source_ip":"10.143.223.172", 
     "dest_ip":"104.20.251.41", 
     "domain":"www.theregister.co.uk", 
     "Domain Path":"/2017/05/25/windows_is_now_built_on_git/", 
     "Domain Query":"NULL", 
     "Http Method":"GET", 
     "Protocol":"HTTP", 
     "Category":"NULL", 
     "FullURL":"http://www.theregister.co.uk/2017/05/25/windows_is_now_built_on_git/" 
    }, 
    ] 
} 

任何幫助搜索查詢返回到變量將不勝感激。

+1

你試過訪問'body_json [ '事件']'了嗎?這不是一個真正的JSON問題;你有一個直接的嵌套數據結構,所有的Python字典和一個列表。 –

+0

換句話說,如果你知道如何在字典或列表訪問某個值,可以計算出如何訪問在這個結構中的數據。 –

回答

1

Json.keys()只返回與JSON相關聯的密鑰。 下面是代碼:

for key in json_data.keys(): 
    for i in range(len(json_data[key])): 
    key2 = json_data[key][i].keys() 
     for k in key2: 
       print k + ":" + json_data[key][i][k] 

輸出:

Http Method:GET 
Category:NULL 
domain:www.theregister.co.uk 
Protocol:HTTP 
Domain Query:NULL 
Domain Path:NULL 
source_ip:10.143.223.172 
FullURL:http://www.theregister.co.uk 
dest_ip:104.20.251.41 


Http Method:GET 
Category:NULL 
domain:www.theregister.co.uk 
Protocol:HTTP 
Domain Query:NULL 
Domain Path:/2017/05/25/windows_is_now_built_on_git/ 
source_ip:10.143.223.172 
FullURL:http://www.theregister.co.uk/2017/05/25/windows_is_now_built_on_git/ 
dest_ip:104.20.251.41 
1

要回答你的問題:是的。您body_json返回一個字典,其中包含詞典列表「事件」的關鍵。

爲「訪問」,最好的辦法他們將在它們之間迭代。

一個非常基本的例子:

for i in body_json['events']: 
     print(i) 

當然,迭代過程中,你可以訪問你需要用print(i['FullURL'])更換print(i)並將其保存到一個變量等具體數據。

需要注意的是,每當你使用的API返回的JSON響應工作,你只是使用詞典和Python的數據結構的工作是非常重要的。

祝你好運。