當(dāng)我們想要通過Python語言對json格式的文件進(jìn)行讀寫操作的時(shí)候迄汛,首先我們需要引入json庫
import json
我們使用Python標(biāo)準(zhǔn)庫json庫實(shí)現(xiàn)對json文件的基本讀取和寫入操作,在標(biāo)準(zhǔn)庫中续誉,主要涉及到四種方法:
json.dump
將一個(gè)python對象編碼為json字符串并且保存到文件中
json.load
將一個(gè)json文件載入,并且返回一個(gè)python字典類型對象
json.dumps
將一個(gè)python對象編碼為json字符串
json.loads
將一個(gè)json字符串轉(zhuǎn)變?yōu)橐粋€(gè)python字典對象
json.dumps方法
功能:將python對象編碼為json字符串
方法:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
例如:
import json
stu_json = json.dumps({"張三": "001", "李四":"002", "王五":"003"})
print(stu_json)
print(type(stu_json))
在上述代碼中初肉,我們把一個(gè)python字典類型的對象作為dumps方法的參數(shù)酷鸦,并且打印方法的返回值和返回值的類型,得到如下輸出:
{"\u5f20\u4e09": "001", "\u674e\u56db": "002", "\u738b\u4e94": "003"}
<class 'str'>
發(fā)現(xiàn)中文并沒有正確顯示牙咏,因此我們需要給dumps方法傳入一個(gè)可選參數(shù)
ensure_ascii=False
臼隔,如下所示:
import json
stu_json = json.dumps({"張三": "001", "李四":"002", "王五":"003"}, ensure_ascii=False)
print(stu_json)
print(type(stu_json))
這個(gè)時(shí)候我們再次輸出結(jié)果可以看到:
{"張三": "001", "李四": "002", "王五": "003"}
<class 'str'>
此時(shí),程序的輸出結(jié)果和我們的預(yù)期結(jié)果是一樣的妄壶,中文被正確地顯示出來了摔握。通過
print(type(stu_json))
語句,我們可以看到輸出結(jié)果是class ‘str’
即dumps方法的返回值是一個(gè)字符串類型的數(shù)據(jù)丁寄。
import json
stu_json = json.dumps({"張三": "001", "李四":"002", "王五":"003"}, ensure_ascii=False,indent=4
, sort_keys=True, separators=(',', ':'))
print(stu_json)
這里面氨淌,
ensure_ascii
參數(shù)為是否使用ascii碼方式泊愧,對于中文顯示來說我們要設(shè)置為False;indent
為設(shè)置每一個(gè)鍵值對前面的縮進(jìn)空格數(shù)量盛正;sort-keys
為是否對鍵進(jìn)行排序删咱,排序方式為按照ascii碼的升序方式;separator
為設(shè)置分隔符豪筝,值得注意的是痰滋,分隔符的設(shè)置需要傳入一個(gè)元組數(shù)據(jù),第一個(gè)參數(shù)是分隔不同鍵值對之間的分隔符续崖;第二個(gè)參數(shù)是分隔同一個(gè)鍵值對中敲街,鍵和值之間的分隔符。代碼運(yùn)行結(jié)果如下:
{
"張三":"001",
"李四":"002",
"王五":"003"
}
json.loads方法
功能:將一個(gè)json字符串轉(zhuǎn)變?yōu)橐粋€(gè)python字典對象
我們將剛剛輸出的字符串當(dāng)作參數(shù)傳給loads方法袜刷,代碼如下:
import json
stu_dict = json.loads("""{
"張三":"001",
"李四":"002",
"王五":"003"
}""")
print(stu_dict)
print(type(stu_dict))
運(yùn)行結(jié)果如下:
{'張三': '001', '李四': '002', '王五': '003'}
<class 'dict'>
通過輸出結(jié)果不難發(fā)現(xiàn)聪富,loads方法成功將json字符串對象轉(zhuǎn)變成了python字典類型對象。
json文件操作——json.dump方法
大多數(shù)情況下著蟹,我們都需要進(jìn)行json文件操作墩蔓,json標(biāo)準(zhǔn)庫中提供的
json.dump
方法就可以實(shí)現(xiàn)將python字典對象編碼成json字符串對象并且保存到文件之中。以下是一個(gè)演示代碼:
import json
stu_dict = {
"張三":"001",
"李四":"002",
"王五":"003"
}
with open('test.json', 'w') as f: # 用寫方式打開一個(gè)名為test.json的文件萧豆,如果不存在奸披,則創(chuàng)建它
json.dump(stu_dict, f) # 寫入文件
運(yùn)行程序,就可以看到在這個(gè).py文件的目錄下會(huì)產(chǎn)生一個(gè)新建的
test.json
文件涮雷,打開可以看到文件內(nèi)容:
{"\u5f20\u4e09": "001", "\u674e\u56db": "002", "\u738b\u4e94": "003"}
類似地阵面,如果想要正確顯示中文并且格式更加美觀,我們依然需要向dump方法中傳入必要的參數(shù):
import json
stu_dict = {
"張三":"001",
"李四":"002",
"王五":"003"
}
with open('test.json', 'w') as f:
json.dump(stu_dict, f, ensure_ascii=False, indent=4, separators=(',', ':'))
再次運(yùn)行程序就可以看到新建的文件內(nèi)容已經(jīng)符合我們的預(yù)期:
{
"張三":"001",
"李四":"002",
"王五":"003"
}
json文件操作——json.load方法
方法功能是從文件中讀取json字符串洪鸭,并且轉(zhuǎn)換為python中的字典類型對象样刷。我們將上一步中生成的
test.json
作為例子演示效果:
import json
with open('test.json', 'r') as f: # 以讀方式打開文件
stu_dict = json.load(f)
print(stu_dict)
print(type(stu_dict))
程序運(yùn)行結(jié)果如下:
{'張三': '001', '李四': '002', '王五': '003'}
<class 'dict'>
這樣我們就成功實(shí)現(xiàn)了python語言讀取json文件并且將其轉(zhuǎn)化為字典(dict)對象。