Dea*_*dly 5 django serialization json django-models
我试图通过以下方式对对象进行序列化QuerySet或Dict对象datetime.date:
方式#1:
json.dumps(MyModel.objects.values())
Run Code Online (Sandbox Code Playgroud)
引发错误:
例外值:[{'date':datetime.date(2012,5,26),'time':datetime.time(0,42,27)}]不是JSON可序列化的
方式#2:
json.dumps(MyModel.objects.values(), cls=DjangoJSONEncoder)
Run Code Online (Sandbox Code Playgroud)
还会引发错误:
例外值:[{'date':datetime.date(2012,5,26),'time':datetime.time(0,42,27)}]不是JSON可序列化的
方式#3:
json.dumps(MyModel.objects.all(), cls=DjangoJSONEncoder)
Run Code Online (Sandbox Code Playgroud)
异常值:[<MyModel:MyModel object>]不是JSON可序列化的
方式#4:
serializers.serialize('json', MyModel.objects.all())
Run Code Online (Sandbox Code Playgroud)
引发错误:
异常值:'str'对象没有属性'_meta'
如何在Django中使用datetime的字段将对象序列化为JSON?
Dan*_*man 13
您的问题与日期时间无关.简单地说,查询集本身不能直接序列化,即使使用DjangoJSONEncoder类甚至使用values().对于没有日期时间字段的模型,您将获得完全相同的结果.
你应该在Django中进行序列化的方法是使用serializers:
from django.core import serializers
output = serializers.serialize('json', MyModel.objects.all())
Run Code Online (Sandbox Code Playgroud)
但毫无疑问,你正试图避免这种情况,因为输出格式是如此不必要的复杂.相反,我通常使用'python'序列化器转换为dict,然后转储到json:
temp_output = serializers.serialize('python', MyModel.objects.all())
output = json.dumps(temp_output, cls=DjangoJSONEncoder)
Run Code Online (Sandbox Code Playgroud)
如果您只想将字典转储为JSON,请使用json.dumps。通过传入自定义的序列化类可以很容易地对对象进行序列化-Django附带了一个已经处理日期时间的类:
from django.core.serializers.json import DjangoJSONEncoder
json.dumps(mydict, cls=DjangoJSONEncoder)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8788 次 |
| 最近记录: |