码迷,mamicode.com
首页 > 编程语言 > 详细

Python json.dumps 特殊数据类型的自定义序列化操作

时间:2016-12-28 12:25:11      阅读:6305      评论:0      收藏:0      [点我收藏+]

标签:imp   ack   .net   osc   技术分享   怎么办   https   方法   mod   

场景描述:

  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 特殊数据类型的自定义序列化操作

标签:imp   ack   .net   osc   技术分享   怎么办   https   方法   mod   

原文地址:http://www.cnblogs.com/hellojesson/p/6228479.html

(1)
(4)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!