• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

重用json模块中类的方法并派生出新的功能

python 搞java代码 3年前 (2022-05-21) 13次浏览 已收录 0个评论

  继承json模块,重用模块中类的方法并派生出新的功能

 

  例:使用json模块序列化字符串

<span>import</span><span> json
</span><span>from</span> <a href="https://www.gaodaima.com/tag/datetime" title="查看更多关于datetime的文章" target="_blank">datetime</a> <span>import</span><span> datetime, date

dict1 </span>=<span> {
    </span><span>#</span><span> "time1": str(datetime.<a href="https://www.gaodaima.com/tag/now" title="查看更多关于now的文章" target="_blank">now</a>())</span>
    <span>"</span><span>time1</span><span>"</span><span>: datetime.now(),
    </span><span>"</span><span>name</span><span>"</span>: <span>"</span><span>orange</span><span>"</span><span>
}

res </span>=<span> json.dumps(dict1)
</span><span>#</span><span> 无法序列datetime.now()格式,报错</span>
<span>print</span>(res)    <span>#</span><span> TypeError: Object of type datetime is not JSON serializable</span>

www#gaodaima.com来源gao($daima.com搞@代@#码(网搞代码

  执行结果:

TypeError: Object of type datetime <span>is</span> <span>not</span> JSON serializable

 

  # 报错原因:在原来json模块中可序列化的数据类型有限,在此例中datetime.now()无法被序列化

  # 解决方法:在原模块下可以继承并重写某些功能(不止json模块,其他模块中的类方法也可继承并重写

<span>import</span><span> json
</span><span>from</span> datetime <span>import</span><span> datetime
<br><span># 自定义一个类
</span></span><span>class</span><span> MyJson(json.JSONEncoder):
    </span><span>#</span><span> datetime.now() ---> o</span>
    <span>#</span><span> 重写json模块中JSONEncoder类的方法</span>
    <span>def</span><span> default(self, o):
        </span><span>#</span><span> isinstance: 判断一个对象是否是一个类的实例</span>
        <span>if</span> isinstance(o, datetime):  <span>#</span><span> True</span>
            <span>return</span> datetime.strftime(o, <span>"</span><span>%Y-%m-%d %X</span><span>"</span><span>)
        </span><span>else</span><span>:
            </span><span>return</span><span> super().default(self, o)


dict1 </span>=<span> {
    </span><span>#</span><span> "time1": str(datetime.now())</span>
    <span>"</span><span>time1</span><span>"</span><span>: datetime.now(),
    </span><span>"</span><span>name</span><span>"</span>: <span>"</span><span>orange</span><span>"</span><span>
}

</span><span>#</span><span> 指定自定义的一个MyJson  派生类</span><span>
#</span><span> cls=自定义的类</span>
res = json.dumps(dict1, cls=<span>MyJson)
</span><span>print</span>(res)

  执行结果:

{<span>"</span><span>time1</span><span>"</span>: <span>"</span><span>2020-10-26 20:48:44</span><span>"</span>, <span>"</span><span>name</span><span>"</span>: <span>"</span><span>orange</span><span>"</span>}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:重用json模块中类的方法并派生出新的功能

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址