【发布时间】:2012-10-01 11:42:09
【问题描述】:
我觉得我错过了一些非常明显的东西,但我看不到它。
在 ipython (Python 2.7) 中,这是可行的:
In [1]: json.loads('[]')
Out[1]: []
我正在尝试在 Django 视图中做一个等效的最小示例,以说服自己在转向真正的数据结构之前我可以阅读 JSON:
def submit(request):
json_string = request.GET['json']
parsed = json.loads(json_string)
return HttpResponse(parsed)
我通过浏览器调用它
http://localhost:8001/submit/?json='[]'
我得到ValueError: No JSON object could be decoded。
我做错了什么,我该如何调试它?这是某种编码问题吗?还是我错误地访问了 GET 的内容?还是别的什么?
我尝试将变量json_string 转储到文件和作为HttpResponse。两次我都得到'[]',这确实看起来很好......
编辑:
为了方便其他想了解如何调试 POST 的初学者,Django 的错误页面在异常中返回。一个快速而讨厌的 hack 是
import os
def debug_post(post_req):
result = None
try:
result = submit_to_endpoint(post_req)
except urllib2.URLError as e:
out_fh = open('debug_post.tmp', 'w')
out_fh.write(e.read())
out_fh.close()
os.system('firefox ' + 'debug.tmp')
return result
【问题讨论】:
-
oO 有什么理由不使用 POST 吗?
-
@BasicWolf - 不,这似乎更易于测试(我可以将客户端的编码 URL 直接剪切并粘贴到浏览器中)。 POST 是更好的选择吗?为什么?
标签: python django json deserialization