本节内容
1、dumps序列化和loads反序列化
2、dump序列化和load反序列化
3、序列函数
1、dumps序列化和loads反序列化
dumps()序列化
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import json #导入json模块info = { 'name':"zhangqigao", "age":22}with open("test.txt","w") as f: #以普通模式写入 data = json.dumps(info) #把内存对象转为字符串 f.write(data) #写到文件中#text.txt文件中的内容{"name": "zhangqigao", "age": 22} |
loads()反序列化
|
1
2
3
4
5
6
7
8
9
|
import jsonwith open("test.txt","r") as f: #以普通模式读 data = json.loads(f.read()) #用loads反序列化print(data.get("age"))#输出22 |
2、dump序列化和load反序列化
dump()序列化
|
1
2
3
4
5
6
7
8
9
10
11
12
|
import jsoninfo = { 'name':"zhangqigao", "age":22}with open("test.txt","w") as f: #文件以写的方式打开 json.dump(info,f) #第1个参数是内存的数据对象 ,第2个参数是文件句柄#text.txt文件中的内容{"name": "zhangqigao", "age": 22} |
load()反序列化
|
1
2
3
4
5
6
7
8
9
|
import jsonwith open("test.txt","r") as f: #以读的方式打开文件 data = json.load(f) #输入文件对象print(data.get("age"))#输出22 |
3、序列化函数
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import jsondef sayhi(name): #函数 print("name:",name)info = { 'name':"zhangqigao", "age":22, "func":sayhi #引用sayhi函数名}with open("test.txt","w") as f: json.dump(info,f) #序列化info数据对象#输出 File "D:PythonPython35libjsonencoder.py", line 403, in _iterencode_dict yield from chunks File "D:PythonPython35libjsonencoder.py", line 436, in _iterencode o = _default(o) File "D:PythonPython35libjsonencoder.py", line 179, in default raise TypeError(repr(o) + " is not JSON serializable")TypeError: <function sayhi at 0x00000000006DD510> is not JSON serializable #不支持jsom序列化 |
小结:
- dumps和loads是成对使用的,dump和load是成对使用的。
- dumps和loads由于序列化的是内容,所以后面要加s,但是dump和load序列化的内容是对象,所以单数。
- json只能处理简单的数据类型,例如:字典、列表、字符串等,不能处理函数等复杂的数据类型。
- json是所有语言通用的,所有语言都支持json,如果我们需要python跟其他语言进行数据交互,那么就用json格式。