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. leetcode-mid-others-150. Evaluate Reverse Polish Notation

    mycode   42.30%. 注意:如果不考虑符号,-1//3=-1而不是等于0,因为是向下取整 class Solution(object): def evalRPN(self, tokens) ...

  2. hdu 6219 Empty Convex Polygons (凸包)

    给你n个点,求面积最大的凸多边形,使得这个凸多边形没有内点. 考虑求凸包的graham算法,需要找到左下角的点,再进行极角排序后按顺序扫点,所以先枚举左下角的点. 这个过程中,如果遇到内点,就需要把这 ...

  3. 你知道 Git 是如何做版本控制的吗?(转)

    总结:阅读这篇文章需要20分钟 本文是转载自 滴滴WebApp架构组 的一篇文章,文章讲解了神秘的.git目录下的一些文件,最终阐述了git是如何存储数据,及git分支的相关内容. git如何存储数据 ...

  4. 测开之路一百三十八:会话管理之session

    session管理和使用,需要用到flask的session模块和设置安全码:app.secret_key 比如列表页和编辑功能只能给admin用 列表页 编辑页 添加session 登录成功时,把u ...

  5. dcef3 指出一个坑

    dcef3 指出一个坑 http://ju.outofmemory.cn/entry/80119 BccSafe's Blog 2014-06-11 2388 阅读   dcef3提供了TChromi ...

  6. Delphi的类与继承

    既然已经做出了com程序用delphi来开发的决定,那当然就要对delphi进行一些深入的了解.有人说delphi是一个用控件堆砌起来的工具,和vb没什么两样:也有人说dephi实际上是面向过程的,他 ...

  7. (一)VS2015下配置OpenGL

    刚开始用OpenGL,一开始不太明白配置库的原理,在VS2015下耗费了大量时间.这里将配置过程做个笔记,以供日后查看.配置过程中,需要下载cmake构建工具以及glew和glfw库. 下载地址为: ...

  8. Golang中log与fmt区别

    关于使用log与使用fmt的区别 最初的就是直接打印出来,之后一点点升级,比如加上输出的时间,加上goroutine之间的并发操作(打印信息并不能一定按照你规定好的顺序输出来 每次输出的顺序可能会不同 ...

  9. 20191127 Spring Boot官方文档学习(6-8)

    6.部署Spring Boot应用程序 在部署应用程序时,Spring Boot的灵活打包选项提供了很多选择.您可以将Spring Boot应用程序部署到各种云平台,容器映像(例如Docker)或虚拟 ...

  10. sql语句传参数

    SET @register = '; SET @unregister = '; UPDATE cw_base_register SET register = @register, unregister ...