Python 常用模块json
2023-12-18 06:12:19
json序列化模块
【1】定义
- 序列化:将数据结构或对象转换为可存储或传输的格式
- 反序列化:将序列化后的数据恢复为开始的数据结构或者对象
- 通过序列化和反序列,可以轻松地在不同的应用程序或平台之间传输数据,并在需要时重新构造原始的数据结构和对象
【2】目的
-
数据持久化存储: 将程序中的数据结构转换为字节流或文本格式,以便长期存储在文件、数据库或其他持久性存储介质中。这样,下次程序运行时,可以通过反序列化将数据重新加载到内存中,继续使用。
-
跨平台数据交互:在不同的应用程序、系统或平台之间传递数据。通过将数据序列化为通用的格式(如 JSON、XML),不同的系统可以轻松地交换信息,而不受编程语言或平台的限制。
-
远程通信:在网络上传输数据时,将数据序列化为字节流,以便通过网络传递。接收方可以将接收到的字节流反序列化为原始数据结构,实现远程通信。
-
缓存:将一些计算昂贵的数据结构序列化并保存在缓存中。这样,下次需要相同数据时,可以直接从缓存中反序列化,而不必重新计算。
-
进程间通信: 在多进程或多线程的环境中,通过序列化可以实现进程间的数据传递。不同的进程可以将数据序列化后传递给其他进程,从而实现进程间的通信。
【3】Json和Python内置的数据类型对应表
Json数据类型 | Python数据类型 |
---|---|
{} | dict |
[] | list、tuple |
“string” | str |
123.456 | inf/float |
true/false | True/False |
null | None |
【4】代码演示
(1)序列化drumps和反序列化loads
-
序列化drumps
-
序列化以后的类型都为json格式的字符串
-
集合无法序列化成json格式的字符串
-
import json
int1 = 1
float1 = 1.1
str1 = "1"
bool1 = True
list1 = [1, 2]
dict1 = {"name": "bruce"}
set1 = {1, 2}
tuple1 = (1, 2)
# 序列化 整型
int_dumps = json.dumps(int1)
print(int_dumps, type(int_dumps)) # 1 <class 'str'>
# 序列化 浮点型
float1_dumps = json.dumps(float1)
print(float1_dumps, type(float1_dumps)) # 1.1 <class 'str'>
# 序列化 字符串
str1_dumps = json.dumps(str1)
print(str1_dumps, type(str1_dumps)) # "1" <class 'str'>
# 序列化 布尔型
bool1_dumps = json.dumps(bool1)
print(bool1_dumps, type(bool1_dumps)) # true <class 'str'>
# 序列化 列表
list1_dumps = json.dumps(list1)
print(list1_dumps, type(list1_dumps)) # [1, 2] <class 'str'>
# 序列化 字典
dict1_dumps = json.dumps(dict1)
print(dict1_dumps, type(dict1_dumps)) # {"name": "bruce"} <class 'str'>
# 序列化 集合
# set1_dumps = json.dumps(set1) # 报错,集合无法转换成json格式
# print(set1_dumps, type(set1_dumps))
# 序列化 元组
tuple1_dumps = json.dumps(tuple1)
print(tuple1_dumps, type(tuple1_dumps)) # [1, 2] <class 'str'>
- 反序列化
- 元组反序列化以后是列表
# 反序列化 整型
int_loads = json.loads(int_dumps)
print(int_loads, type(int_loads)) # 1 <class 'int'>
# 反序列化 浮点型
float1_loads = json.loads(float1_dumps)
print(float1_loads, type(float1_loads)) # 1.1 <class 'float'>
# 反序列化 字符串
str1_loads = json.loads(str1_dumps)
print(str1_loads, type(str1_loads)) # 1 <class 'str'>
# 反序列化 布尔型
bool1_loads = json.loads(bool1_dumps)
print(bool1_loads, type(bool1_loads)) # True <class 'bool'>
# 反序列化 列表
list1_loads = json.loads(list1_dumps)
print(list1_loads, type(list1_loads)) # [1, 2] <class 'list'>
# 反序列化 字典
dict1_loads = json.loads(dict1_dumps)
print(dict1_loads, type(dict1_loads)) # {'name': 'bruce'} <class 'dict'>
# 反序列化 元组
tuple1_loads = json.loads(tuple1_dumps)
print(tuple1_loads, type(tuple1_loads)) # [1, 2] <class 'list'>
(2)序列化drump和反序列化load
- 序列化drump
- 通常保存转换字典格式
- 不适用于追加a模式
import json
user_dict = {"username": "bruce", "age": 18}
with open("01.json", "w", encoding="utf8") as fp:
json.dump(user_dict, fp=fp)
# 结果
# {"username": "bruce", "age": 18}
# 写入文件默认使用ASCII编码存储
# 在open中encoding="utf8"仅表示按照这个格式打开
# 还需要关闭json的默认编码格式
import json
user_dict = {"username": "秦始皇", "age": 100}
with open("01.json", "w", encoding="utf8") as fp:
json.dump(user_dict, fp=fp)
# {"username": "\u79e6\u59cb\u7687", "age": 100}
user_dict = {"username": "秦始皇", "age": 100}
with open("01.json", "w", encoding="utf8") as fp:
json.dump(user_dict, fp=fp)
# {"username": "秦始皇", "age": 100}
- 反序列化load
import json
with open("01.json", "r", encoding="utf8") as fp:
data = json.load(fp=fp)
print(data, type(data))
# {'username': '秦始皇', 'age': 100} <class 'dict'>
【5】应用(登陆注册功能)
import json
def save_data(user_dict):
# 将字典写入user_dict.json文件
with open("user_dict.json", "w", encoding="utf8") as fp:
json.dump(user_dict, fp=fp, ensure_ascii=False)
def read_data():
# 将user_dict.json内容读出
with open("user_dict.json", "r", encoding="utf8") as fp:
user_dict = json.load(fp=fp)
return user_dict
def register():
# 输入用户名和密码
username = input("username>>>:").strip()
password = input("password>>>:").strip()
# 以json格式存储信息
user_dict = {"username": username, "password": password}
save_data(user_dict)
print("register successful")
def login():
# 输入用户名和密码
username = input("username>>>:").strip()
password = input("password>>>:").strip()
# 读取信息并进行校验
user_dict = read_data()
if username == user_dict["username"] and password == user_dict["password"]:
print("login successful")
else:
print("username or password wrong")
register()
login()
文章来源:https://blog.csdn.net/weixin_48183870/article/details/135048260
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!