这是我在django 1.6中的代码(工作正常) 我升级到django 1.7。 第一个simplejson被删除:我将simplejson改为json,但我总是收到同样的错误 不是json可序列化的。
有什么想法吗?
查看:
def request_to_json(request):
post_data = request.body
json_data = simplejson.loads(post_data)
return json_data
def receiver(request):
try:
json_data = request_to_json(request)
user_id=json_data['user_id'];
site_id=json_data['site_id'];
# A variable to return to the app
response = 'Ok'
except:
response = sys.exc_info()[0]
return HttpResponse(simplejson.dumps(response))
错误
TypeError at /views/receiver/
<class 'TypeError'> is not JSON serializable
Request Method: POST
Request URL: http://localhost:8000/views/receiver/
Django Version: 1.7
Exception Type: TypeError
Exception Value:
<class 'TypeError'> is not JSON serializable
Exception Location: C:\Python34\lib\json\encoder.py in default, line 173
Python Executable: C:\Python34\python.EXE
Python Version: 3.4.1
Python Path:
['C:\\workspace-eclipse\\IndoorPositioning',
'C:\\Python34\\lib\\site-packages\\setuptools-5.4.2-py3.4.egg',
'C:\\Windows\\system32\\python34.zip',
'C:\\Python34\\DLLs',
'C:\\Python34\\lib',
'C:\\Python34',
'C:\\Python34\\lib\\site-packages']
Server time: Sat, 13 Sep 2014 12:18:36 +0200
答案 0 :(得分:0)
您的异常处理程序正在引发异常。您正在尝试将整个异常对象序列化为json以返回给用户。而是获取异常的字符串表示并返回:
def receiver(request):
try:
...
except:
response = "%s" % sys.exc_info()[0]
return HttpResponse(simplejson.dumps(response))
(直接返回内部异常消息并不是一个好主意,您应该尝试并专门捕获异常并返回用户友好消息而不是实际异常)
如果您希望看到为什么您的代码中出现异常,则需要允许引发异常。摆脱try
.. catch
块,您将看到关于request_to_json
函数提出的实际异常
从外观上看,问题是您正在尝试序列化the entire body of the request:
post_data = request.body
simplejson
不喜欢