如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
JSON类型 Python类型
{}      dict
[]      list
"string"   'str'或u'unicode'
1234.56   int或float
true/false  True/False
null      None
Python内置的json模块提供了非常完善的Python对象到JSON格式的转换,都在json模块中

1、使用dumps函数可以直接返回一个json格式的字符串,使用dump可以直接将json写入一个文件中对象中。

2、使用loads函数可以直接将一个json格式的字符串反序列化为python对象,用load函数则可以直接从文件中读出字符串并将其反序列化。

3、json可以直接序列化一个字典类型,只需要传入一个字典变量就可以了,但却不能这样自动序列化一个类对象,这就需要它的第二个default参数,这个参数指定一个函数,这个函数的作用就是将类对象属性转化为一个字典,并且每个类默认自带这个方法,就是__dict__,所以序列化类对象的格式如下:

json.dumps(s, default=lambda obj: obj.__dict__)

4、同样的道理,如果我们要把JSON反序列化为一个Student对象实例,loads()方法首先转换出一个dict对象,然后,我们传入的object_hook函数负责把dict 转换为Student实例:

def dict2student(d):
return Student(d['name'], d['age'], d['score']) json_str = '{"age": 20, "score": 88, "name": "Bob"}'
print(json.loads(json_str, object_hook=dict2student))

运行结果如下:
<__main__.Student object at 0x10cd3c190>
打印出的是反序列化的Student实例对象。

最新文章

  1. android下giflib
  2. 如何 实现PHP多版本的 共存 和 切换?
  3. 利用PowerShell+Jenkins,实现项目的自动化部署
  4. OpenGLES入门笔记三
  5. 161018、springMVC中普通类获取注解service方法
  6. 关于Extjs使用window.opener报错
  7. 使用 HttpWebRequest 发送模拟 POST 请求
  8. Nagios显示器mysql定从库: libmysqlclient.so.18: cannot open shared object file: No such
  9. LuceneNet 实现快速大文件大数据查询
  10. norflash启动和nandflash启动
  11. 一个神奇的???whatever~~
  12. nginx 301跳转
  13. skearn/pandas
  14. Singer 学习三 使用Singer进行mongodb 2 postgres 数据转换
  15. CodeM Qualifying Match Q2
  16. MySQL删除数据后磁盘空间的释放情况【转】
  17. loj2537 「PKUWC2018」Minimax 【概率 + 线段树合并】
  18. dp之区间:Light oj 1422 Halloween Costumes
  19. Python学习---Model拾遗[1]180318
  20. 二分 + 模拟 - Carries

热门文章

  1. C语言实例解析精粹学习笔记——18
  2. UPDATE_ENTITY実行
  3. 成都Uber优步司机奖励政策(3月19日)
  4. MySQL高级-查询截取分析
  5. Redis系列六 Redis事务
  6. centos配置ip地址 添加多个ip地址的方法
  7. uvaoj 213 - Message Decoding(二进制,输入技巧)
  8. C 关键字 标示符 注释
  9. Android intel X86 图像渲染
  10. pyhon文件操作典型代码实现(非常经典!)