2015-08-27 76 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