解决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方法进行格式化也可以

原文地址:https://www.cnblogs.com/huchong/p/8818271.html

时间: 2024-10-15 05:46:18

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

解决python中转化成json的方法不能序列化datetime类型数据(转)

Python自带的json.dumps方法序列化数据时候如果格式化的数据中有datetime类型数据时候会提示错误TypeError: datetime.datetime(2012, 12, 12, 15, 47, 15) is not JSON serializable 搜索出来的解决方案基本都是用Django的DjangoJSONEncoder来解决,为了一个简单的办法引入Django这个大家伙实在有点不知所谓.不过这一点就体现了Django的资料多的优势了 正在下决心是否干脆下载了Djan

用js解析经json序列化后的C#的DateTime类型数据

用js解析经json序列化后的C#的DateTime类型数据 (2012-09-21 19:36:03) 转载▼ 标签: 杂谈 分类: javascript // val为经json直接序列化后的C#的DateTime类型的数据function formatTime(val) {    var re = /-?\d+/;    var m = re.exec(val);    var d = new Date(parseInt(m[0]));// 按[2012-02-13 09:09:09]的格

C# 使用linq处理返回带datetime类型数据 json显示/date(xxxxx)/

以前做项目一直遇到带数据库里面带datetime类型数据 返回到前台会变成时间戳 这显然不是我们想要的 于是我在最初的项目中 选择在前端JS格式化date(xxxx)形式的方式处理 现在想来有点蠢 今天灵机一动 想到是不是可以在服务端就把datetime转成string返回到 结果就有了此文 服务端: 1 DataGetEntities context = new DataGetEntities(); 2 var queryTyphoon = context.T_TyphoonPaths.Whe

json序列化datetime类型数据

错误描述: import jsonimport datetime a = datetime.datetime.now()print(a) b = json.dumps(a)print(b) 如上代码,执行会报错: TypeError: datetime.datetime(2017, 2, 5, 10, 27, 48, 155328) is not JSON serializable 因为datetime类型的数据无法直接用json序列化. 解决办法: class CJsonEncoder(jso

JavaScriptSerializer序列化成Json时DateTime类型数据的处理

JavaScriptSerializer在序列化时会将DateTime的数据序列化成类似\/Date(626543800000)\/这样的值,找了很多方法都不如意,最后在一个博客找到了完美的解决方法,地址:http://blog.calyptus.eu/seb/2011/12/custom-datetime-json-serialization/,通过自定义类型转换器的方式转换成想要的格式,转换器代码如下: + ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1

.NET 调用java webservice保存datetime类型数据为空的解决办法

问题描述:       用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到 string类型的属性值,却不能得到int类型.double和DateTime类型的值(在服务端得到的均为null) 问题原因:        VS封装WebService引用时,如果WebService发布的是一个基本数据类型组成的对象,则会对该对象的非string属性同时生成 两个属性,一般是这样的"属性××"."

解决android自带蓝牙不能发送接收某些文件类型

最近,遇到一个蓝牙的bug,刚开始以为不能发送大的文件,最后追踪代码发现,是不能发送某些文件类型的文件的. 默认之支持所有图片,所有视频,所有音频,文本类型,html,zip,excel,word,ppt,pdf等类型. 要想让其支持你要发送/接收的文件类型需要在相应地方添加相应的类型. 发送的文件类型,需要修改package/app/bluetooth目录下的AndroidManifest.xml文件的<data android:mimeType="" />, 添加相应的

开发查询mysql的datetime类型数据时间差了14小时解决

今天开发在测试环境上调试代码的时候发现mysql数据库查出来的时间都错了.所有时间都比数据库时间多了14小时.初步判断是时区的问题.因为mysql时区设置默认是操作系统时区,查看了下centos时区,东8区没有错,所以可以判定是代码里面设置了一个错误的时区. [[email protected] ~]# date -R Sat, 13 Apr 2019 21:01:46 +0800 开发调试代码.发现时区为CST,跟中国的时区Asia/Shanghai正好差了14小时. 那么为什么mybatis

向 mysql 数据库中写入datetime 类型数据时 出现全是0的错误解决办法

Date date = new Date();//获得系统时间. SimpleDateFormat sdf = new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " ); String nowTime = sdf.format(date); Date time = sdf.parse( nowTime );