Python json.dumps 特殊数据类型的自定义序列化操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python json.dumps 特殊数据类型的自定义序列化操作相关的知识,希望对你有一定的参考价值。
场景描述:
Python标准库中的json模块,集成了将数据序列化处理的功能;在使用json.dumps()方法序列化数据时候,如果目标数据中存在datetime数据类型,执行操作时,
会抛出异常:TypeError: datetime.datetime(2016, 12, 10, 11, 04, 21) is not JSON serializable
那么遇到json.dumps序列化不支持的数据类型,该怎么办!
首先,我们先来了解一下,json.dumps,序列化操作默认支持的数据类型:
Python中的序列化操作,主要应用在将数据库中检索的数据返回给客户端用户时;一般情况下,后端返回给前端Ajax请求的数据格式都是Json格式。
1、serializers
from django.core import serializers ret = models.BookType.objects.all() data = serializers.serialize("json", ret)
2、json.dumps
import json #ret = models.BookType.objects.all().values(‘caption‘) ret = models.BookType.objects.all().values_list(‘caption‘) ret=list(ret) result = json.dumps(ret)
对于,特殊的数据类型,例如,datatime() 时间类型,json.dumps不支持该数据类型的序列化;那么就可以通过自定义处理来扩展。
import json from datetime import date from datetime import datetime class JsonCustomEncoder(json.JSONEncoder): def default(self, field): if isinstance(field, datetime): return o.strftime(‘%Y-%m-%d %H:%M:%S‘) elif isinstance(field, date): return o.strftime(‘%Y-%m-%d‘) else: return json.JSONEncoder.default(self, field) # ds = json.dumps(d, cls=JsonCustomEncoder)
使用的时候,只要在json.dumps()方法中增加一个cls参数即可:
实例代码:
参考:https://my.oschina.net/whp/blog/111173
以上是关于Python json.dumps 特殊数据类型的自定义序列化操作的主要内容,如果未能解决你的问题,请参考以下文章
Python中json文件处理的四个函数json.dumps()json.loads()json.dump()和json.load()的区分
python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)