#pickling
import pickle,json
# d = dict(name='傻狗1',age=300,score=100)
# d1 = pickle.dumps(d)#pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件
# print(d1)#b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x07\x00\x00\x00\xe5\x82\xbb\xe7\x8b\x971q\x02X\x03\x00\x00\x00ageq\x03M,\x01X\x05\x00\x00\x00scoreq\x04Kdu.' # with open('./dump.txt','wb') as f:
# pickle.dump(d,f)#用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object # with open('./dump.txt','rb') as f:
# d = pickle.load(f)#用pickle.load()方法从一个file-like Object中直接反序列化出对象
# print(d)#{'name': '傻狗1', 'age': 300, 'score': 100} #JSON
#python对象转JSON
# dict1 = dict(name='傻狗1',age=300,sorce=100)
# json1 = json.dumps(dict1)#dumps()方法返回一个str,内容就是标准的JSON
# print(json1)#{"name": "\u50bb\u72d71", "age": 300, "sorce": 100} # with open('./dump1.json','w') as f:#dump()方法可以直接把JSON写入一个file-like Object
# json2 = json.dump(dict1,f) #JSON转python对象
# json3 = '{"age": 20, "score": 88, "name": "Bob"}'
# dict2 = json.loads(json3)#{'age': 20, 'score': 88, 'name': 'Bob'} loads()把JSON反序列化为Python对象
# print(dict2) #with open('./dump1.json','r') as f1:
# dict3 = json.load(f1)#load()从file-like Object中读取字符串并反序列化
# print(dict3)#{'name': '傻狗1', 'age': 300, 'sorce': 100}
#由于JSON标准规定JSON编码是UTF-8,所以我们总是能正确地在Python的str与JSON的字符串之间转换 #class实例对象转JSON
class Point(object):
def __init__(self,name,age,sorce):
self.name = name
self.age = age
self.sorce = sorce
p1 = Point('傻狗2',300,100)
json4 = json.dumps(p1,ensure_ascii=False,default=lambda obj : obj.__dict__)#json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False
# print(p1.__dict__)#{'name': '傻狗2', 'age': 300, 'sorce': 100} class的实例都有一个__dict__属性,它就是一个dict,用来存储实例变量。也有少数例外,比如定义了__slots__的class
print(json4)#{"name": "\u50bb\u72d72", "age": 300, "sorce": 100} Point实例首先被匿名函数转换成dict,然后再被顺利序列化为JSON #JSON转class实例对象
json5 = '{"age": 20, "score": 88, "name": "Bob"}'
p2 = json.loads(json5,object_hook=lambda obj : Point(obj['name'],obj['age'],obj['score']))
print(p2)#<__main__.Point object at 0x000001AFE1A382E8> loads()方法首先转换出一个dict对象,然后,我们传入的object_hook函数负责把dict转换为Student实例

最新文章

  1. css content之counter-reset、content-increment
  2. 在html中关于如果function的函数名和input的name一样会发生怎样的现象
  3. J2EE修炼之四书五经[转自2004年程序员]
  4. 无限轮播的N+2 策略
  5. spring mvc实现登录+异常
  6. JS全局函数parseInt和parseFloat
  7. spring使用jackson返回object报错:Handler execution resulted in exception: Could not find acceptable representation
  8. eclipse 中忽略jsp, xml文件中的报错信息
  9. C语言——递归练习
  10. 用JAVA实现数字水印(可见)
  11. mysql 的replace 和replace in to
  12. 此windows副本不是正版解决方法
  13. Openjudge-计算概论(A)-短信计费
  14. Lua学习系列(四)
  15. 详解 mpls vpn 的实现
  16. cocos2d-x JS 获取屏幕大小或中点
  17. 解决:Tomcat 局域网IP地址 访问不了
  18. js阻止默认事件、拖拽等等
  19. CentOS7下安装配置Nginx
  20. CHAPTER 24 History of Our Planet 第24章 我们行星的历史

热门文章

  1. Redis多种数据类型以及使用场景
  2. 轻量级 Java 基础开发框架,Solon &amp; Solon Cloud 1.5.40 发布
  3. mysql从零开始之MySQL 选择数据库
  4. 力扣 - 剑指 Offer 17. 打印从1到最大的n位数
  5. 8086的复位与启动 CPU执行指令的步骤
  6. Golang通脉之指针
  7. 爬虫逆向基础,理解 JavaScript 模块化编程 webpack
  8. CSP-J 2021 复赛游记
  9. Python学习系列之一: python相关环境的搭建
  10. Java:并发笔记-07