解决Python自带的json不能序列化data,datetime类型数据问题

官方文档中的一个Demo:

>>> import json

>>> class ComplexEncoder(json.JSONEncoder):
...     def default(self, obj):
...         if isinstance(obj, complex):
...             return [obj.real, obj.imag]
...         return json.JSONEncoder.default(self, obj)
...
>>> dumps(2 + 1j, cls=ComplexEncoder)
'[2.0, 1.0]'
>>> ComplexEncoder().encode(2 + 1j)
'[2.0, 1.0]'
>>> list(ComplexEncoder().iterencode(2 + 1j))
['[', '2.0', ', ', '1.0', ']']

然后简单扩展了一个JSONEncoder出来用来格式化时间

class CJsonEncoder(json.JSONEncoder):

    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, date):
            return obj.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self, obj)

使用时候只要在json.dumps增加一个cls参数即可:

json.dumps(datalist, cls=CJsonEncoder)

如果不想定义类,直接在我们获取的date或者datetime对象后面用上strftime方法进行格式化也可以

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Golang语言社区--【基础知识】go安装步骤

解压go语言安装包 tar -zxvf go1.7beta1.linux-amd64.tar.gz 环境变量配置 vim .bash_profile expor...

3398
来自专栏JarvanMo的IT专栏

Flutter: Failed to notify project evalution listener

又是一个常见的flutter的环境问题,一般发生在引用了plugin之后。因为默认的gradle,kotlin之类的比较旧,而所引用的plugin里面的grad...

2072
来自专栏IT笔记

Linux下安装memcached之Tomcat7集群

这两天,在捣鼓负载均衡的问题,使用的是memcached做session存储。但是你造吗?居然没有成功,都硕失败是成功之母,我想我快成功了。 ? 安装环境 ce...

3699
来自专栏分布式系统进阶

Influxdb 编译

1311
来自专栏Golang语言社区

mac系统下搭建go语言环境

1,首先查看是否安装go,或者安装版本 yishiyaonie:GO liuhanlin$ go versiongo version go1.5.1 darwi...

4698
来自专栏程序猿

Burp Suite第十五节:BurpSuite全局参数设置和使用

在Burp Suite中,存在一些粗粒度的设置,这些设置选项,一旦设置了将会对Burp Suite的整体产生效果,这就是Burp Suite中Op...

5918
来自专栏一个会写诗的程序员的博客

《Springboot开发问题纪要》java.lang.IllegalArgumentException: Request header is too large问题日志:java.lang.Ille

org.apache.coyote.http11.AbstractHttp11Protocol

852
来自专栏IT笔记

ThreadPoolExecutor-线程池开发的使用

1:必须明白为什么要使用线程池:(这点很重要) ?   a:手上项目所需,因为项目主要的目的是实现多线程的数据推送;需要创建多线程的话,那就要处理好线程安全...

3767
来自专栏运维前线

CentOS7 安装RocketMQ并使用

RocketMQ 介绍 Apache RocketMQ™是一个开源的分布式消息传递和流数据平台。 RocketMQ Github: https://git...

32410
来自专栏柠檬先生

vue-cli#2.0 webpack 配置分析

目录结构: ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-c...

3865

扫码关注云+社区