一.json的概念
- json是一種通用的數據類型
- 一般情況下接口返回的數據類型都是json
- 長得像字典,形式也是k-v{ }
- 其實json是字符串
- 字符串不能用key、value來取值,所以要先轉換為字典才可以
- json的格式如下:
{
"error_code": 0,#要使用雙引號,如果是單引號則運行時會報錯,可以上網做在線json格式校驗
"stu_info": [
{
"id": 309,
"name": "小白",
"sex": "男",
"age": 28,
"addr": "河南省濟源市北海大道32號",
"grade": "天蠍座",
"phone": "18512572946",
"gold": 100
},
{
"id": 310,
"name": "小白",
"sex": "男",
"age": 28,
"addr": "河南省濟源市北海大道32號",
"grade": "天蠍座",
"phone": "18516572946",
"gold": 100
}
]
}
二、json操作
1.json轉換成字典:
(1).load()方法
import json
res = json.loads(s)
print(res) # 打印字典
print(type(res)) #打印res類型
print(res.keys()) #打印字典的所有key
- 要先讀文件,然后轉換:
f = open('stus.json',encoding='utf-8')
content = f.read() #使用loads()方法需要先讀文件
user_dic = json.loads(cotent)
print(user_dic)
(2).load()方法
import json
f = open('stus.json',encoding="utf-8")
user_dic = json.load(f)
print(user_dic)
(3)區別
- loads() 傳的是字符串,而load()傳的是文件對象
- 使用loads()時需要先讀取文件在使用,而load()則不用
2、字典轉成json串:
- 文件里只能寫字符串,但是可以把字典轉成json串,json串是字符串,可以寫到文件里
(1)dumps()方法
stus = {'xiaojun':'123456','xiaohei':'7891','abc':'11111'}
res2 = json.dumps(stus) #先把字典轉成json
print(res2)
print(type(res2))
- dumps()方法:把字典轉換為json串
with open('stus.txt','w',encoding='utf-8') as f: # 打開文件
f.write(res2) #在文件里寫入轉成的json串
- 使用.dumps()方法前,要先打開文件,再寫入:
stus={'xiaojun':'123456','xiaohei':'7890','lrx':'111111'}
res2 = json.dumps(stus,indent=8,ensuer_ascii=False)
print(res2)
with open("stus.json",'w‘,encoding='utf-8') as f # 使用.dumps()方法是要寫入
f.write(res2)
(2)dump()方法
stus={'xiaojun':'123456','xiaohei':'7890','lrx':'111111'}
f = open('stus2.json','w',encoding='utf-8')
json.dump(stus,f,indent,ensure_ascii=False)
(3)區別
- dump()不需要使用.write()方法,只需要寫那個字典,那個文件即可;而.dumps()需要使用.write()方法寫入.
- 如果把字典寫到文件里面的時候,dump()好用;但是如果不需要操作文件,或需要把內容存儲到數據庫何excel,則需要使用dumps()先把字典轉換成字符串,再寫入.
(4)dump\dumps參數 - dumps/dump中使用參數indent,為字符串轉行 + 縮進:
res2=json.dumps(stus.indent=4)
print(res2)#打印字符串
#結果為:
'''
{
"xiaojun": "123456",
"xiaohei": "7891",
"lrx": "hailong",
"tanailing": "111111"
}
'''
- dumps\dump中使用參數 ensure_ascii,為內容輸出為中文:
res2 = json.dumps(stus,indent=4,ensure_ascii=False) # 為False時內容輸出顯示正常的中文,而不是轉碼
print(res2)
3、不管是dump還是load,帶s的都是和字符串相關的,不帶s的都是和文件相關的。
微信掃碼關注作者,每天get新技巧!