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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |