1. Python數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為JSON對(duì)象
json 模塊提供了一種很簡單的方式來編碼和解碼JSON數(shù)據(jù)。 其中兩個(gè)主要的函數(shù)是 json.dumps()和 json.loads() , 要比其他序列化函數(shù)庫如pickle的接口少得多。 下面演示如何將一個(gè)Python數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為JSON對(duì)象:
import json
data = {
'name' : 'ACME',
'shares' : 100,
'price' : 542.23
}
json_str = json.dumps(data)
下面演示如何將一個(gè)JSON編碼的字符串轉(zhuǎn)換回一個(gè)Python數(shù)據(jù)結(jié)構(gòu):
data = json.loads(json_str)
JSON編碼支持的基本數(shù)據(jù)類型為None,bool,int,float和str, 以及包含這些類型數(shù)據(jù)的list,tuple和dictionary。 對(duì)于dictionary,keys需要是字符串類型(字典中任何非字符串類型的key在編碼時(shí)會(huì)先轉(zhuǎn)換為字符串)。 為了遵循JSON規(guī)范,你應(yīng)該只編碼Python的list和dictionary。
2. JSON文件讀寫
如果你要處理的是文件而不是字符串,你可以使用另外的json.dump()和json.load()函數(shù)來編碼和解碼JSON數(shù)據(jù)。例如:
# Writing JSON data
with open('data.json', 'w') as f:
json.dump(data, f)
# Reading data back
with open('data.json', 'r') as f:
data = json.load(f)
注意此處open()函數(shù)中讀寫模式的實(shí)參:在編碼JSON數(shù)據(jù)時(shí)使用'w'寫入模式,解碼JSON數(shù)據(jù)時(shí)使用'r'只讀模式。使用錯(cuò)誤的寫入模式(如'a'附加模式)會(huì)導(dǎo)致寫入文件的JSON數(shù)據(jù)格式出現(xiàn)錯(cuò)誤。此外注意寫入與讀取JSON文件的步驟(上下文管理器)應(yīng)該分開。
參考來源
[1] Python Cookbook, 3rd edition, by David Beazley and Brian K. Jones (O’Reilly). Copyright 2013 David Beazley and Brian Jones, 978-1-449-34037-7
[2] python3-cookbook中文譯本,譯者熊能,網(wǎng)址鏈接:http://python3-cookbook.readthedocs.io/zh_CN/latest/c06/p02_read-write_json_data.html