json模块和pickle模块

一、json模块

作用:用python写了一个程序,用java写了一门程序,这两个程序需要数据之间交流,就产生了一种多种语言通用的数据类型,json串。

  • 序列化:把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening。

    序列化的优点:

    1. 持久保存状态:内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个程序的之前一段时间的数据(有结构)都被清空了。但是在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中),以便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。
    2. 跨平台数据交互:序列化时不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好实用一种序列化的格式,那么便打破了平台/语言差异化带来的限制,实现了跨平台数据交互。

json数据类型和python数据类型对应关系表

Json类型 Python类型
{} dict
[] list
"string" str
520.13 int或float
true/false True/False
null None
JSON Python
object dict
array list
string str
number (int) int
number (real) float
true True
false False
null None

json模块序列化和反序列化的一个过程如下图所示

import json
# 序列化: 从python的字典(最常用)变成json串,dump # 反序列化:从json串变成python的字典(最常用), load
  1. 内存序列化
dic = {'name': 'randysun', 'age': 18}
# 序列化到内存中
data = json.dumps(dic)
print(data, type(data)) # 反序列化
# 注意:无论数据是怎样创建的,只要满足json格式(如果是字典,则字典内元素都是双引号),就可以json.loads出来,不一定非要dumps的数据才能loads
data = json.loads(data)
print(data, type(data))

结果:

{"name": "randysun", "age": 18} <class 'str'>

{'name': 'randysun', 'age': 18} <class 'dict'>

  1. 文件序列化

    # 对文件内容进行序列化
    with open('test.json', 'w', encoding='utf8') as fw:
    json.dump(dic, fw) with open('test.json', 'r', encoding='utf8') as fr:
    data = json.load(fr)
    print(data)

    结果:

    {'name': 'randysun', 'age': 18}

二、pickle

Pickle序列化和所有其他编程语言特有的序列化问题一样,它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,即不能成功地反序列化也没关系。但是pickle的好处是可以存储Python中的所有的数据类型,包括对象,而json不可以。

import pickle
dic = {'name': 'randysun', 'age': 18} def func():
x = 3
print(x) with open('test.pkl', 'wb') as fw:
pickle.dump(func, fw) with open('test.pkl', 'rb') as fr:
data = pickle.load(fr)
print(data)
data()

结果:

<function func at 0x000001906940C268>

3

最新文章

  1. 你是否经常忘记网站上的各种密码?分享个密码管理软件LastPass
  2. UIkit框架之UIwebview
  3. python BeautifulSoup实例测验
  4. [C] static和extern的作用
  5. Repeater删改
  6. 值得推荐的C/C++框架和库(转)
  7. android系统平台显示驱动开发简要:LCD常用接口篇『二』
  8. 贪心算法:旅行商问题(TSP)
  9. VS2010中添加dll目录
  10. unity3d 学习笔记(两)
  11. [google面试CTCI] 2-2 找出链表的倒数第n个节点元素
  12. Quick Cocos2dx controller的初步实现
  13. django 调试 监控文件变化 自动刷新浏览器
  14. vb代码之-------当窗体BorderStyle属性为0时,添加窗口预览到任务栏
  15. My Stuck in C++
  16. C# IIS站点管理--Microsoft.Web.Administration.dll
  17. 二、Laravel手动下载安装及初始化配置(此处以Laravel5.2为例)
  18. IE8 CSS hack
  19. iOS: 聊聊 Designated Initializer(指定初始化函数):NS_DESIGNATED_INITIALIZER
  20. 小程序swiper 快速滑动闪屏

热门文章

  1. 使用GDAL实现DEM的地貌晕渲图(二)
  2. echarts在react项目中的使用
  3. 【MySQL】(二)InnoDB存储引擎
  4. net core 序列化与反序列化与遇到的几个坑
  5. 给定一个IP地址,转化为二进制32位,再转化为十进制,写出一个方法让其十进制转为IP地址
  6. Wireshark着色规则
  7. WTM 构建DotNetCore开源生态,坐而论道不如起而行之
  8. 注解与AOP切面编程实现redis缓存与数据库查询的解耦
  9. Spring注解浅入浅出——不吹牛逼不装逼
  10. spring boot 加载自定义log4j 文件路径