使用 Python 请求和错误代码解析 JSON 数组
Posted
技术标签:
【中文标题】使用 Python 请求和错误代码解析 JSON 数组【英文标题】:Parsing JSON Array using Python Requests & Error Codes 【发布时间】:2015-11-22 09:46:08 【问题描述】:我正在尝试解析 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":"世嘉土星","slug":"saturn","id":14,"name":"Mac"," slug":"mac","id":47,"name":"虚拟控制台(任天堂)","slug":"vc"
我收到错误:
预期的字符串或缓冲区
当我使用此代码时,它可以工作,但输出错误,并且不适用于数组:
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 - 密钥无效,等等……
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:这是因为你在json.loads
中传递了一个request
对象
在错误中它说它需要一个字符串或缓冲区。您可以通过以下方式从请求中传递字符串:
json.loads(platformReq.text)
但platformReq.json()
的工作方式相同!
希望对您有所帮助。
编辑
回复您的状态码问题(抱歉之前没有看到)。您可以像这样检查响应状态代码:
if platformReq.status_code == requests.codes.ok:
# Print the response
print platformReq.json()
else:
print "Something went wrong";
【讨论】:
打印时它的格式仍然很奇怪,它在所有内容之前都有字母 u。请参阅第一篇文章。 @AllTheGoodNamesWereTaken 那是因为它是 unicode。这不是一件坏事,计算机可以完美读取。顺便说一句,我编辑了我的帖子,我没有看到你的状态码问题。 如果它给了我一个特定的状态码,例如:500。我能具体说明问题是什么吗? @AllTheGoodNamesWereTaken 这意味着它有一个内部服务器错误,这是在他们这边。这里是关于状态码的更多信息w3.org/Protocols/rfc2616/rfc2616-sec10.html【参考方案2】:如果您期待 JSON 响应,您注释掉的代码应该可以工作:
json.loads(platformReq.text)
你得到的错误是因为 json.loads() 需要一个字符串,而不是一个响应对象。
至于错误处理,我建议在此顶部为 platformReg.status_code 添加一个检查,以确保在继续之前它等于 200
【讨论】:
如果我需要将错误推送到网页上怎么办?例如,如果它给出 500 错误,我将如何显示? @AllTheGoodNamesWereTaken 假设此代码在视图中,您可以执行以下操作:----if platformReq.status_code == 500:
------------------ ----------------------------------------------------------- return HttpResponse('500_error.html')
-------------------------------------------------- ------------ 您将不得不创建该 html 页面,但您可以这样做来显示它。如果这应该返回 JSON,请将 html 页面替换为 JSON 对象,其中包含您在前端检查的错误消息。以上是关于使用 Python 请求和错误代码解析 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章
使用 Shell / Python 解析格式错误的 JSON