如何在 Python 中使用 `json` 模塊?
在Python中,json 模塊提供了一個(gè)非常方便的方法來處理JSON數(shù)據(jù)。無論是將Python對象轉(zhuǎn)換為JSON格式(序列化),還是將JSON格式的數(shù)據(jù)解析為Python對象(反序列化),json 模塊都能滿足你的需求。
序列化:從Python對象到JSON
使用 json.dumps()
json.dumps() 函數(shù)用于將Python對象轉(zhuǎn)換為JSON格式的字符串。
import json
# Python對象
data = {
"name": "Alice",
"age": 25,
"is_student": False
}
# 將Python對象轉(zhuǎn)換為JSON字符串
json_str = json.dumps(data, ensure_ascii=False)
print("JSON字符串:", json_str)
在這個(gè)例子中,我們定義了一個(gè)包含一些基本信息的字典,并使用 json.dumps() 方法將其轉(zhuǎn)換為JSON格式的字符串。ensure_ascii=False 參數(shù)確保非ASCII字符能夠正確顯示。
寫入文件
如果你想要直接將JSON數(shù)據(jù)寫入文件,可以使用 json.dump() 方法:
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
print("數(shù)據(jù)已寫入文件")
這里,indent=4 參數(shù)使得輸出更加美觀易讀。
反序列化:從JSON到Python對象
使用 json.loads()
json.loads() 函數(shù)用于將JSON格式的字符串轉(zhuǎn)換為Python對象。
json_string = '{"name": "Bob", "age": 30, "is_student": true}'
parsed_data = json.loads(json_string)
print("解析后的數(shù)據(jù):", parsed_data)
這個(gè)例子展示了如何將一個(gè)JSON字符串轉(zhuǎn)換回Python對象(在這個(gè)案例中是一個(gè)字典)。
從文件讀取
如果你想從文件中讀取JSON數(shù)據(jù)并轉(zhuǎn)換為Python對象,可以使用 json.load() 方法:
with open('data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
print("從文件加載的數(shù)據(jù):", loaded_data)
其他常用選項(xiàng)
sort_keys:如果設(shè)置為 True,則輸出的JSON對象中的鍵會(huì)按照字母順序排序。
separators:允許你自定義分隔符,默認(rèn)是 (', ', ': ')。例如,為了生成最緊湊的JSON表示形式,可以使用 (',', ':')。
compact_json = json.dumps(data, separators=(',', ':'))
print("緊湊的JSON:", compact_json)
注意事項(xiàng)
類型對應(yīng):需要注意的是,Python與JSON之間存在特定的數(shù)據(jù)類型映射規(guī)則。例如,Python中的 dict 對應(yīng)于JSON中的對象,list 和 tuple 都映射為JSON數(shù)組等。
安全性:雖然 json 模塊非常適合處理普通的JSON數(shù)據(jù)交換任務(wù),但它并不適合處理不可信來源的數(shù)據(jù)。對于更復(fù)雜或潛在不安全的數(shù)據(jù)源,考慮使用其他方法如 pickle(盡管它也有自己的安全問題),或者使用專門的安全庫。