JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,Python的Json模块有序列化与反序列化两个过程。即 encoding和 decoding。
-
encoding:把一个python对象编码转换成Json字符串。
-
decoding:把json格式字符串编码转换成python对象。
什么是序列化、反序列化?
我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
即把python中的对象变成可存储的json字符串。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
Json模块提供了四个功能:dumps、dump、loads、load
JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
json的4个方法
json提供四个功能:dumps, dump, loads, load
1、dumps和dump
序列化过程
将一个python对象编码转换成Json字符串,可以存储可以网络远程传输
dumps只完成了序列化为str,将数据通过特殊的形式转换为所有程序语言都认识的字符串
dump必须传文件描述符,将序列化的str保存到文件中,将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
import json dic = {"k1":"v1"} str1 ="HelloPython" data1 = json.dumps(dic) data2 = json.dumps(str1) print (data1),type(data1) print (data2), type(data2)
with open("test.json","w+") as f:
json.dump(dic,f)
输出结果:
{"k1":"v1"} <class 'str'>
"HelloPython" <class 'str'>
生成一个test.json的文件,内容:
{"k1":"v1"}
2、loads 和 load
loads 只完成了反序列化,将json编码的字符串再转换为python的数据结构
load 只接收文件描述符,完成了读取文件和反序列化,数据文件中读取数据,并将json编码的字符串转换为python的数据结构
1 import json 2 3 4 with open("test.json") as f: 5 data = json.load(f) 6 #data = json.loads(f.read()) 7 8 print (data) 9 print (type(data))
输出结果:
{"k1":"v1"} <class 'dict'>