开发者学堂课程【Python 入门 2020年版:Json 和 pickle 的区别 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10407
Json 和 pickle 的区别
内容介绍:
一、pickle 和 Json 区别
二、用 Json 在前端与服务器间传递数据
三、json 和 pickle 使用场景
一、pickle 和 Json 区别
pickle 和 json 区别?
什么情况下使用 json,什么情况下使用 pickle?
pickle 用来将数据原封不动的转换成为二进制,其中所有的属性和函数都还在,加载回来还可以继续使用。
但是这个二进制,只能在 Python 里识别。
就是加载完成后就变成二进制,若想加载回来必须得用 python ,保证数据保存的完整性,打包成二进制需要根据 python 解释器的规则变成二进制,加载回来的话还得用 python 读取回来。
json 只能保存一部分信息,作用是用来在不同的平台里传递数据。json 里存储的数据都是基本的数据类型,在不同的平台里面其实都差不多,不管什么平台里都有这种基本的数据类型,不管是 python 语言还是 JAVA 语言中,都有数字、都有字符串、都有列表、都有列表,只不过在不同的平台里面的称呼不太一样而已,所以 json 的作用就是用来传递数据的。
二、用 Json 在前端与服务器间传递数据
1.前端向服务器传递数据
首先,前端页面将接口文档(规定特定的数据类型,便于服务器拿到不同的数据,一般使用 json 传递数据)发送给服务器
info = '{
"name":"zhangsan",
"age":18,
"height":1.75,
"pass":true,
"hobbies":[“sing"," dace" ,"basketball ," “rap”]
#字符串为双引号,兴趣爱好有多个字符串,需要重新再创建一个列表。
类型场景:
支持字符串、整数、浮点数、布尔值、列表等,
}’
#整个单引号的内容是一个字符串,服务器拿到前端页面传递的字符串后,会用特定方法将数据加载出来
person = json.loads(info)
#load 将数据转换成字典
person['name’]
perons['hobbies’]
#通过字典可以直接加载数据。
2.服务器处理数据并返回给前端提示
字符串不管在哪传入服务器,服务器都可以认识,甚至服务器不是用 python 语句写的而是用 java 语句写的,服务器也依然认识, json 就是不同平台之间数据交换的一个结构。
现在服务器经过一些处理,获得了一串注册信息,拿到用户名、拿到密码后把用户信息写入到服务器中。
当把它写入到数据库服务器后,要告知用户是不是注册成功,注册成功后应该怎么将数据返回回去呢?
这个时候需要返回字典:
result = {'success:True}
#字典其实是 Python 语句中的一种数据类型
x = json.dumps(result)
#注册成功后把数据再重新加载成字符串’
{"success":true}
'
。
result = JSON.parse(x)
#前端拿到数据,通过字典加载数据,通过网络传输给前端,再进行后续操作。
其实服务器开发就是来回传递数据,客户端给服务器传什么数据,服务器就给客户返回什么数据,中间的数据到底传什么,接口文档会做具体规定。
接口文档就是前端注册的时候到底要给服务器传哪些字段,这个文件里面写的清清楚楚,规定了传递的数据类型。
中间数据这个东西是牵一发动全身的,前端的数据传过来,服务器这边还要要通过这个规则来拿,一旦写错了就拿不到,程序就会立即报错。数据库中的表格数据都是规定好了的,前端的字段跟后端解析的字段以及数据库中的数据都是一一对应的。
服务器工程师更加容易成长成为全栈工程师,因为作为服务器工程师了解数据是如何从客户端进入服务器,且如何从服务器再传入客户端的,接口文档都是通过后端的工程师编写的,里面的所有数据规定都是后端的人来做,所以后端的工程师更容易成长为全站工程师。
三、json 和 pickle 使用场景
1.思考: json 和 pickle 两个模块都可以将对象进行序列化和反序列化,那它们有哪些区别,在使用场景上又该如何选择?
json 模块:
将对象转换成为字符串,不管是在哪种操作系统,哪种编程语言里,字符串都是可识别的。
json 就是用来在不同平台间传递数据的。并不是所有的对象都可以直接转换成为一个字符串。
下标列出了 Python 对象与 json 字符串的对应关系
Python JSON
dict (字典) object(对象)
list,tuple(列表,元组) array(字符串类型)
str (字符串) string
int,float(数字类型) number
True true
False false
None null
除了以上的字符串,都是不能相互转换的。
如果是一个自定义对象,默认无法转换成为 json 字符串,需要手动指定 JSONEncoder。
如果是将一个 json 串重新转换成为对象,这个对象里的方法就无法使用了。
2.教大家怎么样把一个 python 对象,转换成 json 字符串。
p= Person( ‘ henry' , 28)
print(json.dumps(p._dict_))
把 p 转换成字典 p._dict_,dump 虽然不认识对象,但是它认识字典。
但是转换成 json 会有一个问题,eat 方法将不能使用,只能保留属性,Json 的作用就是用来传递字符串的,所以它存在一个问题:只保留属性。
pickle 模块:
pickle 序列化是将对象按照一定的规则转换成为二进制保存,它不能跨平台传递数据。
pickle 的序列化会将对象的所有数据都原封不动的保存,你存入的是什么数据返回的就是什么数据。