在Django 1.8 Python 3.4中出现TypeError: object is not JSON serializable错误。
在Django 1.8 Python 3.4中出现TypeError: object is not JSON serializable错误。
我正在使用Django 1.8和Python 3.4。
当运行以下视图时,Django会抛出类型错误-对象不可JSON序列化。
Views.py
from django.http import HttpRequest,HttpResponse from django.http import JsonResponse from json import dumps def get_stats(request): if request.method == "POST": srch_dropV = request.POST['srch_dropAJ'] else: srch_dropV = '' if(srch_dropV == 'Green'): students = GreenBased.objects.all() if(srch_dropV == 'Yellow'): students = YellowBased.objects.all() response_data = {} try: response_data['result'] = 'Success' response_data['message'] = list(students) except: response_data['result'] = 'Ouch!' response_data['message'] = '脚本未正确运行' return HttpResponse(JsonResponse(response_data), content_type="application/json")
我尝试从MySQL数据库中读取几行并在HTML文件中显示它,但当上述视图运行时,我遇到以下错误消息:
TypeError: YellowBased: YelloBased对象不可JSON序列化
在HTML页面中,我有一个下拉列表..根据所选的选项,我的Ajax将返回从MySQL表获取的记录。
Models.py
class GreenBased(models.Model): NumOfStudents = models.CharField(max_length=300,blank=True) Green = models.CharField(max_length=300,blank=True) class Meta: managed = False db_table = "GreenStats" class YelloBased(models.Model): NumOfStudents = models.CharField(max_length=300,blank=True) Yellow = models.CharField(max_length=300,blank=True) class Meta: managed = False db_table = "YellowStats"
GreenStats和YellowStats表在MySQL中只包含2 * 2行。
有人可以帮我找出这个问题吗?
问题的原因是在Django 1.8和Python 3.4环境下,无法将对象直接序列化为JSON格式。解决方法是使用Django的序列化器将对象列表序列化为JSON格式。
在给定的代码中,通过导入相关模块并使用序列化器将学生对象列表序列化为JSON格式。在try块中,将序列化后的结果赋值给response_data字典的'message'键。如果序列化过程出现异常,将异常信息赋值给'result'键和'message'键。
最后,通过JsonResponse函数将response_data字典返回为JSON格式的HTTP响应。
需要注意的是,代码中的一行有所修改:response_data['message'] = serializers.serialize('json', students)
。
此外,可以通过查看Django文档来了解更多自定义序列化的方式。希望这对你有所帮助!
参考链接:https://docs.djangoproject.com/en/1.8/topics/serialization/