zoukankan      html  css  js  c++  java
  • 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参数为ComplexEncoder就可以。

    实例代码:

    参考:https://my.oschina.net/whp/blog/111173

  • 相关阅读:
    将项目中某些常用设置做成配置项
    资产管理平台去除zabbix字样
    navicat远程连接报错
    Excel数据导入MySql数据库
    Ubuntu16.04使用命令行安装jdk1.8
    zabbix4.0配置短信报警
    整洁代码系列(2)
    找回篮球场上的快乐
    努力做人、努力学习、努力让身边的人过得更好 --2016年总结、2017年规划
    整洁代码系列(1)
  • 原文地址:https://www.cnblogs.com/hellojesson/p/6228479.html
Copyright © 2011-2022 走看看