Python序列化和反序列化JSON的方法整理
发布日期:2022-03-03 10:44:13 浏览次数:4 分类:技术文章

本文共 1057 字,大约阅读时间需要 3 分钟。

简单数据类型

  • 对于python的built-in数据类型(string、unicode、int、float、list、tuple、dict),可以直接import json使用json.dumps()序列化和json.loads()来反序列化。
  • 对于自定义类型的数据结构,json模块默认是没法处理的,会抛出异常:TypeError xx is not JSON serializable,此时你需要自定义一个转换函数。

  • 如果遇到日期格式,可能会报一个类似的错:

    TypeError: datetime.datetime(2007,7,23,12,24,25) is not JSON serializable
    解决方案如下:

import jsonfrom datetime import date, datetimedef __default(obj):    if isinstance(obj, datetime):        return obj.strftime('%Y-%m-%dT%H:%M:%S')    elif isinstance(obj, date):        return obj.strftime('%Y-%m-%d')    else:        raise TypeError('%r is not JSON serializable' % obj)# 注意姿势jsonstr = json.dumps(myresult,default=__default)

Django Model / QuerySet

然而json包不能序列化django的models里面的对象的实例。 可以采用处理。

  • 利用 django.core.serializers 的实现

  • 利用python提供的json/simplejson包在django model的定义中增加一个方法toJSON,利用了django model能访问meta.fields得到相关属性而获取值,进而序列化为json


更好的方式

json模块(API继承自simplejson)提供了两种方式来序列化对象:

1. 实现一个default()函数,它接收一个对象作为参数并且返回可以被JSONEncoder理解的东西;
2. 自己实现或子类化一个JSONEncoder,并且把它作为cls传递给dump方法。可以自己实现它或者简单地重写JSONEncoder.default()方法。
提供了一种更优雅的序列化方式

转载地址:https://blog.csdn.net/yangjiegang8/article/details/78176190 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:禁止浏览器自动填充密码
下一篇:selenium(python)定位(查找)元素的方法小结

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月11日 22时31分07秒