DJANGO升级错误:不是JSON可序列化的

时间:2014-09-13 10:33:16

标签: python json django serialization

这是我在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

1 个答案:

答案 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不喜欢