json概述:
json其实就是一种文本格式, 用来在不同的应用中传输数据。
json字符串案例:
{"name": "233", "age": 18, "salary": 5000.5, "hoddy": ["money", "girl"]}
语法规则
字符串一定要用双引号
python | json |
---|---|
字典 | 对象 |
列表 | 数组 |
字符串 | 字符串 |
int或float | 数字 |
Ture,False | true或flase |
None | null |
json模块接口
json.dumps(obj) #将python数据转化为json
json.loads(s) #将json数据转换为python的数据
json.dump(obj, fp) #转换为json并保存到文件中
json.load(fp) #从文件中读取json,并转化为python数据
import json
# json 格式的字符串
json_str = '{"name":"源氏", "age": 18, "salary": 5000.5, "hobby": ["money", "girl"]}'
# 需求,改掉 name对应的值,为‘xinlan’
# json字符串 -> python object
# json 字符串转换成 python中的数据类型
data = json.loads(json_str) # 转换成字典
# print(data)
data['name'] = 'xinlan'
data['hobby'].append('慢跑')
# print(data['hobby'][-1])
# print(data)
# python object -> json 字符串
json_str = json.dumps(data, ensure_ascii=False, indent=1)
print(json_str)
print(type(json_str))
数据加密
hash(一种算法的名称 ,哈希 ,散列)
它是把 ,任意长度的输入通过算法转变成固定长度的输出 , 该输出就是散列
特点:不可逆 ,定常输出 ,抗修改性 ,强碰撞性
应用:数据指纹 , 区块链 ,数据加密
提供了很多的hash算法 , 主要有:
api | 描述 |
---|---|
hashlib.new(name, data=b”) | 生成一个hash对象 |
hashlib.hash算法名(data=b”) | 生成一个使用该算法的hash对象 |
Hash对象.update(arg=None) | 更新hash对象 |
Hash对象.digest() | 返回Hash算法计算得到的值(bytes类型) |
Hash对象.hexdigest() | 返回Hash算法计算得到的值(str类型**)** |
3.代码案例
# 使用hashlib
import hashlib
info = '沙x比x'
m = hashlib.md5(info.encode()) # 注意一定要传递二进制数
res1 = m.hexdigest() # 散列字符串
res2 = m.digest() # 二进制数据
print(res1)
print(res2)
import hashlib
info = '沙x比x最帅!'
# 1.选择一种算法, 创建一个算法对象
m = hashlib.md5()
# 2. 添加数据
m.update('沙x比x'.encode())
m.update('最帅!'.encode())
# 3.获取散列结果
res = m.hexdigest()
print(res)
大文件hash
# 使用hashlib hash 大文件
import hashlib
# 1.创建算法对象
m = hashlib.md5()
# 2.读取文件
with open('json.wmv', 'rb') as f:
for line in f:
m.update(line)
res = m.hexdigest()
print(res)
base64是一种斑马方式 , 将二进制数转化为字符串的方法
用途:
标准的base64编码
首先准备一个包含64个字符的数组:
['A', 'B',...,'a', 'b',...'0', '1',...'9', '+', '/']
对二进制数据进行梳理,每3个字节为一组,一共就是3*8=24位,划分成4组,每组刚好6位
然后将6位二进制数转换成10进制数,得到4个索引,然后查表,获得相应的4个字符,就是编码后的字符串。
如果要编码的二进制数长度不是3的倍数,最后会剩下 1,或者2个字节,就是用\x00
再末尾补充
再到编码末尾加上1到2个=
号,表示补了多少个字节,解码的时候,会自动去掉。
‘a’ 01100001 00000000 00000000
011000 010000 000000 000000
24 16 0 0
Y Q = =
自定义base64编码
其实就是改变字符串数组的字符,和顺序
url safe 编码
对url进行base64编码。标准的base64中,+, /
不能直接作为url参数,所以有又出现一种,url safe base64编码。
它将+, /
替换成 -,_
,并且去掉补齐的=
编码接受的是二进数据,返回的也是二进数据
解码接受的也是二进数据,返回的也是二进数据
base64.b64encode(s) #对二进制数据进行base64编码
base64.b64decode(s) #对通过base64编码的数据进行解码
base64.urlsafe_b64encode(s) #对URL进行base64编码
base64.urlsafe_b64decode(s) #对URL进行base64解码
import base64
data = '2b桑'
res = base64.b64encode(data.encode()) # 编码 需要传入二进制数
res2 = base64.b64decode(res)
res2 = res2.decode('utf-8') # 解码 返回的是二进制数
print(res)
print(res2)