json反序列化与pickle

一、定义

序列化:将内存中的不可持久化和传输对象转换为可方便持久化和传输对象的过程。

反序列化:将可持久化和传输对象转换为不可持久化和传输对象的过程。

二、 应用场景

跨平台数据传输;
保留上一次运行程序时对对象的修改

三、模块和函数

1. json

dumps()、dump()(序列化)

loads()、load() (反序列化)

2. pickle

dumps()、dump()(序列化)

loads()、load ()(反序列化)


dumps()与dump()的区别是dumps()只是单纯得将对象序列化,而dump()会在序列化之后将结果写入到文件当中;
与之对应,loads()与load()区别至于loads()是对dumps的序列化结果进行反序列化,而dump()会从文件中读取内容进行反序列化。
四、案例

序列化

info={"name":"kezi","age":22}
f=open("test.text","w")
f.write(str(info))
f.close() 反序列 info={"name":"kezi","age":22}
f=open("test.text","r")
data=eval(f.read())
f.close()
print (data['age']) 打印结果
22 json 简单用法 import json info={"name":"kezi","age":22}
f=open("test.text","w")
print(json.dumps(info))
f.write(json.dumps(info))
#f.write(str(info))
f.close() 打印结果
{"age": 22, "name": "kezi"} import json f=open("test.text","r")
#data=eval(f.read())
data=json.loads(f.read())
f.close()
print (data['age'])
打印结果
22 序列化
pickle import pickle
def si(name):
print("helle",name)
info={"name":"kezi","age":22,"func":si}
f=open("test.text","wb")
print(pickle.dumps(info))
f.write(pickle.dumps(info))
#f.write(str(info))
f.close() 打印结果
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00keziq\x02X\x03\x00\x00\x00ageq\x03K\x16X\x04\x00\x00\x00funcq\x04c__main__\nsi\nq\x05u.' 反序列化 import pickle
def si(name):
print("helle2",name)
f=open("test.text","rb")
#data=eval(f.read())
data=pickle.loads(f.read())
f.close()
print (data["func"]("kezi")) 打印结果
helle2 kezi
None 另一种简化写法
import pickle
def si(name):
print("helle",name)
info={"name":"kezi","age":22,"func":si}
f=open("test.text","wb")
pickle.dump(info,f) #f.write(pickle.dumps(info))
f.close() import pickle
def si(name):
print("helle2",name)
f=open("test.text","rb")
#data=eval(f.read())
data=pickle.load(f)#data=pickle.loads(f.read())
f.close()
print (data ["func"]("kezi"))

pickle序列化结果为bites类型,只适合于Python机器之间的交互。

    json序列化结果为str类型,能够被多种语言识别,可用于与其他程序设计语言交互。
  目前,JSON格式字符串已经成为网络传输中的一种标准格式,所以在web后台开发中通常用json模块来序列化而不是pickle模块。
  JSON和Python内置的数据类型对应如下:
JSON类型
Python类型
{}
dict
[]
list
"string"
'str'或u'unicode'
1234.56
int或float
true/false
True/False
null
None

注:

 (1)序列化与反序列化是为了解决内存中对象的持久化与传输问题;

(2)Python中提供了pickle和json两个模块进行序列化与反序列化;
(3)dumps()和dump()用于序列化,loads()和load()用于反序列化;
(4)pickle模块能序列化任何对象,序列化结果为bites类型,只适合于Python机器之间交互;
json模块只能序列化Python基本类型,序列化结果为json格式字符串,适合不同开发语言之间交互。
json的用法与pickle大致相同,但要注意在读写文件时json的读写模式是“w”和“b”,而不是“wb”和“rb”。
 

json反序列化与pickle的用法的更多相关文章

  1. json模块和pickle模块的用法

    在python中,可以使用pickle和json两个模块对数据进行序列化操作 其中: json可以用于字符串或者字典等与python数据类型之间的序列化与反序列化操作 pickle可以用于python ...

  2. Python开发之序列化与反序列化:pickle、json模块使用详解

    1 引言 在日常开发中,所有的对象都是存储在内存当中,尤其是像python这样的坚持一切接对象的高级程序设计语言,一旦关机,在写在内存中的数据都将不复存在.另一方面,存储在内存够中的对象由于编程语言. ...

  3. 序列化模块— json模块,pickle模块,shelve模块

    json模块 pickle模块 shelve模块 序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. # 序列化模块 # 数据类型转化成字符串的过程就是序列化 # 为了方便存储和网 ...

  4. json模块和pickle模块(二十二)

    之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型, json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用 ...

  5. Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块

    一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...

  6. Newtonsoft.Json(Json.net)的基本用法

    Newtonsoft.Json(Json.net)的基本用法 其它资料 JSON详解 添加引用: 使用NuGet,命令:install-package Newtonsoft.Json 实体类: pub ...

  7. Python库:序列化和反序列化模块pickle介绍

    1 前言 在“通过简单示例来理解什么是机器学习”这篇文章里提到了pickle库的使用,本文来做进一步的阐述. 通过简单示例来理解什么是机器学习 pickle是python语言的一个标准模块,安装pyt ...

  8. Newtonsoft.Json反序列化(Deserialize)出错:Bad JSON escape sequence

    使用Newtonsoft.Json反序列化收到的字串为JObject或其它支持的数据模型,有时错误,提示如下: Bad JSON escape sequence: \c. Path , positio ...

  9. python中序列化json模块和pickle模块

    内置模块和第三方模块 json模块和pickle 模块(序列化模块) 什么是序列化? 序列化就是将内粗这种的数据类型转成另一种格式 序列化:字典类型——>序列化——>其他格式——>存 ...

随机推荐

  1. 一个时序图描述从用户在浏览器地址栏输入url并按回车,到浏览器显示相关内容的各个过程

    其实考察的就是一次HTTP请求所经过的过程和Spring或者SpringMVC怎么调用dispatcherServlet的过程

  2. 探究代码审查(Code review)

    Code review 是什么 对软件源代码的系统性检查,查找软件源代码质量,结构,漏洞等问题. PS:Code review  ≍ Code inspections ≥ Code walkthrou ...

  3. 微信小程序打印json log

    微信小程序中如果 res.data数据是一个json格式数据.console.log("===data===" + res.data);//如果这样打印出了是只会打印一个对象名称, ...

  4. CentOS7修改计算机名!

    https://www.cnblogs.com/acgpiano/p/4170546.html sudo hostnamectl set-hostname <host-name>

  5. 数据库MySQL(课下作业,必做) 20175225

    作业要求: 1.下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,导入world.sql,提交导入成功 ...

  6. java中的null类型---有关null的9件事

    摘自 https://blog.csdn.net/qq_25077777/article/details/80174763 今天听到一个问题,java中的null类型,null竟然是一种类型 java ...

  7. phpstudy composer 安装

    今天突然发现phpstudy 可以安装 composer 一打开php中openssl拓展 坑一  我的phpstudy 是2018最新版本,但是你下载laravel什么之类库会报错,是由于compo ...

  8. ubuntu 18.04 gcc g++降级4.8版

    $ sudo apt-get install -y gcc-4.8 $ sudo apt-get install -y g++-4.8 $ cd /usr/bin $ sudo rm gcc $ su ...

  9. 关于db4o的透明激活与激活声明

    关于db4o的透明激活与激活声明 有关于透明激活,其介绍可以参看这里:http://www.cnblogs.com/redmoon/archive/2008/02/23/1078619.html 文中 ...

  10. Python--笔试题

    一.如何提高Python的运行效率: 1.使用生成器,因为可以节约大量内存 2.循环代码优化,避免过多重复代码的执行 3.核心模块用Cython PyPy等,提高效率 4.多进程.多线程.协程 5.多 ...