json模块
json是一个序列化模块,主要用于跨语言传输数据,包含了两个关键函数
- json.dumps(): 将python数据类型转换成json格式字符串
- json.loads(): 将json格式字符串转换成对应的数据类型
官方文档:https://docs.python.org/zh-cn/3/library/json.html
Python 编码为 JSON 类型转换对应表
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int- & float-derived Enums | number |
True | true |
False | false |
None | null |
JSON 解码为 Python 类型转换对应表
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number (int) | int |
number (real) | float |
true | True |
false | False |
null | None |
python转换json (dumps)
import json
d = {'username': 'kevin', 'pwd': 123}
print(d, type(d))
# {'username': 'kevin', 'pwd': 123} <class 'dict'>
res = json.dumps(d)
print(res, type(res))
# {"username": "kevin", "pwd": 123} <class 'str'>
'''双引号是json格式数据独有的标志符号'''
res = '{"username":"kevin","pwd":123}'
print(res)
# {"username":"jason","pwd":123} 也算json格式
json转换python(loads)
res = json.loads(res)
print(res, type(res))
# {'username': 'kevin', 'pwd': 123} <class 'dict'>
python转换json写入文件(dump)
import json
d = {'username': 'kevin', 'pwd': 123}
with open(r'info.json', 'w', encoding='utf8') as f:
json.dump(d, f)
读取json文件转换python(load)
with open(r'info.json', 'r', encoding='utf8') as f:
res = json.load(f)
print(res, type(res))
# {'username': 'kevin', 'pwd': 123} <class 'dict'>
针对需要存取中文数据处理
使用前
import json
d = {"国籍": "中国"}
with open(r'info.json', 'w', encoding='utf8') as f:
json.dump(d, f)
使用后
# ensure_ascii 关键字参数
import json
d = {"国籍": "中国"}
with open(r'info.json', 'w', encoding='utf8') as f:
json.dump(d, f,ensure_ascii=False)
pickle模块(了解)
pickle
模块是Python
专用的持久化模块,可以持久化包括自定义类在内的各种数据。但是持久化后的字串是不可认读的,并且只能用于Python
环境,不能用作与其它语言进行数据交换。
使用
import pickle
class MyClass(object):
school = 'school'
def __init__(self, name):
self.name = name
def choose_course(self):
print("%s正在选课" % self.name)
obj = MyClass('kevin')
print(obj.school)
obj.choose_course()
with open(r'%s' % obj.name, 'wb') as f:
pickle.dump(obj, f)
with open(r'kevin', 'rb') as f:
data = pickle.load(f)
print(data)
print(data.name)
print(data.school)