2016-07-01 37 views
2

當我試圖用Python解析這個JSON輸出時,我錯過了什麼? JSON如下所示:我解析這個JSON輸出時丟失了什麼

{ 
    "start": 0, 
    "terms": [ 
    "process_name:egagent.exe" 
    ], 
    "highlights": [], 
    "total_results": 448, 
    "filtered": {}, 
    "facets": {}, 
    "results": [ 
    { 
     "username": "SYSTEM", 
     "alert_type": "test" 
    }, 
    { 
     "username": "SYSTEM2", 
     "alert_type": "test" 
    } 
    ] 
    } 

我試圖用來訪問它的Python很簡單。我想抓住用戶名,但我嘗試的所有內容都會引發錯誤。當它沒有發生錯誤時,我似乎得到了每一個的字母。所以,如果我這樣做:

apirequest = requests.get(requesturl, headers=headers, verify=False) 
readable = json.loads(apirequest.content) 

#print readable 
for i in readable: 
    print (i[0]) 

我得到s,t,h,t,f,f,r,這是每個項目的第一個字母。如果我嘗試我[1],我會得到每個項目的第二個字母。當我按名稱嘗試時,比如說我[[開始]]時,出現錯誤,說明字符串索引必須是整數。我很困惑,我是Python的新手,但是我還沒有發現任何東西。請幫忙!我只想訪問用戶名字段,這就是爲什麼我想要做for循環。提前致謝!

+0

如果您遍歷一個字典,你只會得到鑰匙。嘗試'爲key,value in readable.items():'! –

+0

可能的重複http://stackoverflow.com/a/16129667/5922757 – Jezor

回答

0

如果readable是您的JSON對象(dict),那麼您可以使用它們的鍵訪問每個地圖中的元素。

readable["results"][0]["username"] 

應該給你"SYSTEM"字符串作爲結果。

要打印每一個用戶名,這樣做:

for result in readable["results"]: 
    print(result["username"]) 

如果你的JSON是str對象,你必須deserialize it with json.loads(readable) first

+0

謝謝!我現在能夠得到它,但它限制了我一定數量。應該有400左右的輸出,但我只看到像10.我應該如何調整for循環來解析通過每個用戶名在每個結果抓住每一個?我已經添加了一個迭代器,它被添加到每個循環中,但它只能捕獲10個左右。所以我有我在可讀:打印(可讀[「結果」] [計數] [「用戶名」])計數+ = 1 – CluelessJSMan

+0

你將不得不向我們展示更多的代碼(當然不是整個JSON,你可以用'...'替換過多的對象)。不管你有多少「結果」。 – Jezor

2

試試這個:

for i in readable["results"]: 
    print i["username"] 
2

裝入JSON字符串:

import json 

s = """ 
{ 
    "start": 0, 
    "terms": [ 
    "process_name:egagent.exe" 
    ], 
    "highlights": [], 
    "total_results": 448, 
    "filtered": {}, 
    "facets": {}, 
    "results": [ 
    { 
     "username": "SYSTEM", 
     "alert_type": "test" 
    }, 
    { 
     "username": "SYSTEM2", 
     "alert_type": "test" 
    } 
    ] 
} 
""" 

和打印的用戶名,每結果:

print [res['username'] for res in json.loads(s)['results']] 

輸出:

[u'SYSTEM', u'SYSTEM2'] 
1

for i in readable將通過readable字典中的每個鍵迭代i。如果您然後打印i[0],您正在打印每個鍵的第一個字符。

既然你想用它與"results"鍵相關聯的列表中的條目"username"鍵關聯的值,你可以讓他們像這樣:

for result in readable["results"]: 
    print (result["username"]) 
相關問題