加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Python3 解决 Json 无法解析 datetime 格式数据

发布时间:2021-05-21 04:53:23 所属栏目:大数据 来源: https://blog.csdn.net/yilovex
导读:因为 Json 格式是由 JavaScript 对象为基础创建的轻量级数据格式,而 JS 没有 datetime 数据类型,所以在 Python 中使用 json.dumps 会报错(至于为什么会出现 datetime 格式的数据,最常见的是请求 MysqL 数据库时,数据库给返回的是 datetime 格式的数据)

因为 Json 格式是由 JavaScript 对象为基础创建的轻量级数据格式,而 JS 没有 datetime 数据类型,所以在 Python 中使用 json.dumps 会报错(至于为什么会出现 datetime 格式的数据,最常见的是请求 MysqL 数据库时,数据库给返回的是 datetime 格式的数据)

datetimeTypeError: datetime.datetime(2019,6,25,17,18,22) is not JSON serializable

解决方案:

重写 json 模块的类,遇到日期特殊处理

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import json
import datetime

# Json 无法解析 datatime 类型的数据,构建 DateEncoder 类解决 datatime 解析问题
class DateEncoder(json.JSONEncoder):

    def default(self,obj):

        if isinstance(obj,datetime.datetime):
            return obj.strftime("%Y-%m-%d %H:%M:%S")

        else:
            return json.JSONEncoder.default(self,obj)

使用时调用 json.dumps 方法的时候,将 DateEncoder 作为参数传递给 json.dumps 即可

data = {'name': 'jack','create_time': datetime.datetime(2019,22)}

json_data = json.dumps(data,cls=DateEncoder)
print(json_data)

但是这样每次调用 Json 都需传递参数比较麻烦,不符合 Python 极简的精髓。 所以,我们使用偏函数将参数绑定到原来的 json.dumps 方法上

import functools

# 利用偏函数重写 dumps 方法,使其支持解析 datatime 类型
json.dumps = functools.partial(json.dumps,cls=DateEncoder)

json_data = json.dumps(data)
print(json_data)

运行结果:

{"name": "jack","create_time": "2019-06-25 17:18:22"}

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读