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

Python自带的json.dumps方法序列化数据时候如果格式化的数据中有datetime类型数据时候会提示错误TypeError: datetime.datetime(2012, 12, 12, 15, 47, 15) is not JSON serializable

搜索出来的解决方案基本都是用Django的DjangoJSONEncoder来解决,为了一个简单的办法引入Django这个大家伙实在有点不知所谓。不过这一点就体现了Django的资料多的优势了

正在下决心是否干脆下载了Django的代码去翻出DjangoJSONEncoder这个方法来的时候看到了官方文档中关于json.dumps方法的一个参数(cls)说明:

To use a custom JSONEncoder subclass (e.g. one that overrides the default() method to serialize additional types), specify it with the cls kwarg; otherwise JSONEncoder is used.

然后就看到了官方文档中的一个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出来用来格式化时间

 1 import json
 2 from datetime import date, datetime
 3
 4 class CJsonEncoder(json.JSONEncoder):
 5   def default(self, obj):
 6     if isinstance(obj, datetime):
 7       return obj.strftime(‘%Y-%m-%d %H:%M:%S‘)
 8     elif isinstance(obj, date):
 9       return obj.strftime(‘%Y-%m-%d‘)
10     else:
11       return json.JSONEncoder.default(self, obj)

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

json.dumps(datalist, cls=CJsonEncoder)
 
时间: 2024-11-10 08:27:11

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

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

用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

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

Python—使用Json序列化Datetime类型

import json from datetime import datetime, date """ str,int,list,tuple,dict,bool,None这些数据类型都支撑json序列化操作. 但是datetime类型不支持json序列化,我们可以自定义datetime的序列化. """ class JsonToDatetime(json.JSONEncoder): """ JSONEncoder不知

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

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

解决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(

JSON 的数据类型 以及传递bool类型数据的处理方式

ajax中使用json传递数据时,其它数据类型都不是问题,但是如果服务器端生成的JSON中有bool类型的数据时,到客户端解析时出现了小小的问题,总结如下: 服务器返回的JSON为: 代码如下: {"TypeID":[1037],"Title":"河北软件职业技术学院","Intro":"","IsLink":"false","LinkUrl":&

开发查询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