2015-08-27 58 views
1

我試圖解析JSON數組,但是,我遇到了一些問題。 這裏是我當前的代碼:使用Python請求和錯誤代碼解析JSON數組

from django.http import HttpResponse 
import json, requests 
platformUrl = 'https://www.igbd.com/api/v1/platforms' 
platformReq = requests.get(platformUrl, headers={'Authorization': 'Token token="1234"'}) 
platformData = json.loads(platformReq)#json.loads(platformReq.text) 
platformList = data['platforms'] 

print platformList 

的例子輸出爲:

{"platforms":[{"id":32,"name":"Sega Saturn","slug":"saturn"},{"id":14,"name":"Mac","slug":"mac"},{"id":47,"name":"Virtual Console (Nintendo)","slug":"vc"}

我收到提示:

expected string or buffer

當我使用此代碼,它的工作原理,但輸出是錯誤的,它不適用於陣列:

from django.http import HttpResponse 
import json, requests 

platformUrl = 'https://www.igdb.com/api/v1/platforms' 
platformReq = requests.get(platformUrl, headers={'Authorization': 'Token token=1234"'}) 
platformData = platformReq.json() 

print platformData 

下面是該代碼的輸出:

{u'platforms': [{u'slug': u'saturn', u'id': 32, u'name': u'Sega Saturn'}, {u'slug': u'mac', u'id': 14, u'name': u'Mac'}, {u'slug': u'vc', u'id': 47, u'name': u'Virtual Console (Nintendo)'}

獎金的問題:我將如何處理錯誤的請求? 例如:200 - 一切正常,401 - 無效密鑰等,等等...

任何幫助,將不勝感激。

回答

2

之前是因爲您在傳遞一個request對象時,它等於200 json.loads

在錯誤中說它需要一個字符串或緩衝區來代替。您可以通過執行從請求字符串中傳遞:

json.loads(platformReq.text) 

platformReq.json()以同樣的方式!

希望有所幫助。

編輯

要以您的身份代碼的問題作出迴應(抱歉沒有看到過它)。您可以這樣查看回復狀態代碼:

if platformReq.status_code == requests.codes.ok: 
    # Print the response 
    print platformReq.json() 
else: 
    print "Something went wrong"; 
+0

它打印時仍然很奇怪,它在所有內容之前都有字母u。看到第一篇文章。 – AllTheGoodNamesWereTaken

+0

@AllTheGoodNamesWere這是因爲它是unicode。這不是一件壞事,電腦可以完美地閱讀。順便說一句,我編輯我的帖子,我沒有看到你的狀態代碼問題。 –

+0

如果它給了我一個特定的狀態碼,例如:500.我可以指定問題是什麼嗎? – AllTheGoodNamesWereTaken

1

如果你期待的JSON響應,你已經註釋掉應該工作的代碼:

json.loads(platformReq.text) 

你所得到的錯誤是因爲json.loads()需要一個字符串,而不是響應對象。

至於錯誤處理,我會建議在此之上的platformReg.status_code增加一個檢查,以確保在繼續

+0

如果我需要將錯誤推送到網頁,該怎麼辦?例如,如果它給出了500錯誤,我將如何顯示該錯誤? – AllTheGoodNamesWereTaken

+0

@AllTheGoodNamesWereTaken假設這段代碼在視圖內,你可以做如下的事情:---- 'if platformReq.status_code == 500:'---------------- ------------------------------------------------- 'return HttpResponse('500_error.html')'--------------------------------------- ---------------------- 你將不得不創建該HTML頁面,但這是你可以做的事情來顯示它。 如果這應該返回JSON,請用帶有錯誤消息的JSON對象替換該HTML頁面,並在前端檢查它。 – siracoj