序列化(serializable):將python或其餘語言的數據類型轉換成字符串python
序列:指的是字符串json
json是第三方的特殊數據格式code
爲了讓不一樣語言之間數據能夠共享utf-8
各類語言的數據類型不同,但長相同樣,要想使用其餘語言的數據類型,必須轉換成json數據格式,獲取到json數據格式會轉換成自身的數據類型ci
python數據類型 ——> json數據格式 ——> 字符串 ——> 文件字符串
其餘語言若想使用python保存的數據:it
文件 ——> 字符串 ——> json數據格式 ——> 其餘語言的數據類型class
注意: 一、json中全部字符串都是雙引號import
二、元組比較特殊,python中的元組,轉換成json數據,內部會將元組轉成列表coding
三、set(集合)不能轉換成json數據
import json
json.dumps():序列化:python數據類型——》json——》字符串
json.loads():反序列化:字符串——》json——》python數據類型
json.dump():序列化:python數據類型——》json——》字符串——》json文件中
json.load():反序列化:json文件——》字符串——》json——》python數據類型
所以:dump和load使用更加方便直接存取文件中,保存json數據時必定要以.json文件後綴
一、dumps與loads
import json l1 = ['張全蛋', '李二蛋'] # 序列化,將本語言的類型轉換成json類型進而轉換成字符串 # ensure_ascii默認的是True,轉換成字符串後是bytes類型 json_str = json.dumps(l1,ensure_ascii=False) print(json_str) print(type(json_str)) # <class 'str'> # 將轉換後的數據反序列化成本語言的數據類型 json_list = json.loads(json_str) print(json_list) print(type(json_list)) # <class 'list'>
#元組會被轉換成列表 t1 = (1,2,'shen') # 序列化 json_str = json.dumps(t1,ensure_ascii=False) print(json_str) print(type(json_str)) # <class 'str'> # 反序列化 json_tuple = json.loads(json_str) print(json_tuple) # [1, 2, 'shen'] print(type(json_tuple)) # <class 'list'>
二、dump和load
# 用dumps和loads存讀文件 dic = {'name': '沈', 'pwd': '123456'} # 序列化轉換成字符串寫入文件中 json_str = json.dumps(dic,ensure_ascii=False) with open('user.json','w',encoding='utf-8') as f: f.write(json_str) # 反序列化 json_dict = json.loads(json_str) with open('user.json','r',encoding='utf-8') as f: print(f.read())
# 用dump和load存取文件 dic = {'name': '沈', 'pwd': '123456'} with open('user2.json', 'w', encoding='utf-8') as f: # json.dump(dic,f) # 存到文件中是bytes類型 json.dump(dic,f,ensure_ascii=False) # 轉換bytes類型 with open('user2.json','r',encoding='utf-8') as f: print(json.load(f))
用dump和load能夠直接寫入文件和讀取文件,不須要先轉換成json字符串在寫入和讀取文件