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

python – jsonpickle datetime到可读的json格式

发布时间:2020-12-20 11:30:46 所属栏目:Python 来源:网络整理
导读:是否可以将datetime转换为可读的 JSON格式(可以从javascript使用)?目前jsonpickle仅为datetime提供二进制编码值. 解决方法 这里有几个陷阱: 首先,请不要在时区中流量不知道日期时间对象.你会感到痛苦,不是今天,也许不是明天,而是某一天.你可以从别人的错误
是否可以将datetime转换为可读的 JSON格式(可以从javascript使用)?目前jsonpickle仅为datetime提供二进制编码值.

解决方法

这里有几个陷阱:

首先,请不要在时区中流量不知道日期时间对象.你会感到痛苦,不是今天,也许不是明天,而是某一天.你可以从别人的错误中学习(我的),或者你可以学到很多困难.据我所知,Python允许你在没有时区的情况下制作日期时间对象是一个错误.

第二,strptime不处理时区!所以你做了正确的事情,然后你以某种格式写了你的日期,并想把它读回来,并且kablooey,你得到’%z格式错误的字符串’.格儿.

使用iso8601库来解析ISO8601日期时间字符串.时区处理.

第三,jsonpickle没有清楚地记录如何滚动你自己的DatetimeHandler.所以,是的,你只是想要一些易读的东西,你发送到Javascript或其他什么?上面的解决方案没问题.你想要的东西是清晰的,但你也想在某些时候把它拉回到Python中?嗯,比较棘手.

这里有一个提示:当您继承库以扩展其功能时,请仔细查看您正在扩展的超类.

我会以不同的方式编写DatetimeHandler.但是下面的作品,包含了我在这个主题上所有来之不易的智慧.哎哟.

import pytz
import jsonpickle
import iso8601
from datetime import datetime

class Blah(object):

    def __init__(self,blah):
        self.datetime = datetime.now(pytz.utc)
        self.blah = blah

    def to_json(self):
        return jsonpickle.encode(self)

    @classmethod
    def from_json(cls,json_str):
        return jsonpickle.decode(json_str)

class DatePickleISO8601(jsonpickle.handlers.DatetimeHandler):
    def flatten(self,obj,data):
        pickler = self.context
        if not pickler.unpicklable:
            return unicode(obj)
        cls,args = obj.__reduce__()
        flatten = pickler.flatten
        payload = obj.isoformat()
        args = [payload] + [flatten(i,reset=False) for i in args[1:]]
        data['__reduce__'] = (flatten(cls,reset=False),args)
        return data

    def restore(self,data):
        cls,args = data['__reduce__']
        unpickler = self.context
        restore = unpickler.restore
        cls = restore(cls,reset=False)
        value = iso8601.parse_date(args[0])
        return value

jsonpickle.handlers.registry.register(datetime,DatePickleISO8601)

(编辑:李大同)

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

    推荐文章
      热点阅读