我們?cè)谧鼋涌跍y(cè)試的時(shí)候测柠,接觸最多的數(shù)據(jù)格式應(yīng)當(dāng)是JSON格式了悠就。我們先看下JSON的定義:
JSON: JavaScript Object Notation(JavaScript 對(duì)象表示法)
JSON 是存儲(chǔ)和交換文本信息的語(yǔ)法错邦。類似 XML。
JSON 比 XML 更小、更快锦积,更易解析。
我們看一個(gè)簡(jiǎn)單的例子:
{
"sites": [
{
"name": "Nemo",
"url": "http://www.reibang.com/u/ea364f9b9048"
},
{
"name": "google",
"url": "www.google.com"
}
]
}
看了這個(gè)例子歉嗓,有的人會(huì)說(shuō)丰介,這不就是Python里面的字典么?既然是字典鉴分,為什么還需要轉(zhuǎn)換哮幢?
其實(shí)這只是看起來(lái),實(shí)際上是有很大差異的志珍,JSON里面的數(shù)據(jù)類型和Python里面的數(shù)據(jù)類型是不一樣的橙垢;
比如Python里面的字典,JSON里面是對(duì)象伦糯;Python里面的字符串是str柜某,而JSON里面是string;Python里面的空值是None敛纲,JSON里面的空值是null喂击。
這是一個(gè)Python中的列表,元素只有一個(gè)字典:
[{
'a': 1,
'b': 2,
'c': 3,
'd': True,
'e': False,
'f': None
}]
我們可以通過(guò)一些在線的JSON校驗(yàn)格式化工具看看這是不是一個(gè)JSON數(shù)據(jù)载慈。試一試惭等!
我們看一下結(jié)果:
注意,要想得到圖中的效果办铡,記得點(diǎn) “ 新版 ”辞做。
從上面的圖片中琳要,我們可以看出JSON格式中單引號(hào)是不被識(shí)別的,另外True秤茅、False稚补、None也是不能被識(shí)別的。
由于這些差異的存在框喳,如果不轉(zhuǎn)換直接使用把Python里面的字典當(dāng)成JSON使用课幕,或者直接拿獲取到的JSON數(shù)據(jù)當(dāng)成字典用,都會(huì)出錯(cuò)五垮。
Python與JSON數(shù)據(jù)類型對(duì)應(yīng)表:
Python | JSON | 說(shuō)明 |
---|---|---|
dict | object | 字典 |
list, tuple | array | 序列 |
str | string | 字符串 |
int, float | number | 數(shù)字類型 |
True | true | 布爾值True |
False | false | 布爾值 False |
None | null | 空值 |
既然知道了為什么要轉(zhuǎn)換乍惊,就來(lái)了解怎么轉(zhuǎn)換,這就需要用到Python的內(nèi)置模塊json放仗,內(nèi)置模塊润绎,在代碼中直接引用即可:
import json
json模塊中主要用到的就4個(gè)函數(shù):
json.dumps(): 將Python數(shù)據(jù)編碼(轉(zhuǎn)換)為JSON數(shù)據(jù);
json.loads(): 將JSON數(shù)據(jù)轉(zhuǎn)換(解碼)為Python數(shù)據(jù);
json.dump(): 將Python數(shù)據(jù)編碼并寫入JSON文件诞挨;
json.load(): 從JSON文件中讀取數(shù)據(jù)并解碼莉撇。
接下來(lái)我們看下這些函數(shù)怎么使用:
#!/usr/bin/python3
import json
data = [{
'a': 1,
'b': 2,
'c': 3,
'd': True, #注意觀察,在python的字典中
'e': False, # True和False首字母是大寫的
'f': None # 空值是None
}]
json_data = json.dumps(data)
print(json_data)
輸出結(jié)果:
[{"a": 1, "b": 2, "c": 3, "d": true, "e": false, "f": null}]
注意觀察上面的結(jié)果:
單引號(hào)變成了雙引號(hào)(用JSON數(shù)據(jù)的時(shí)候雙引號(hào)才是標(biāo)準(zhǔn)的)惶傻;
首字母大寫的True和False變成了全小寫true棍郎、false;
空值由None變成了null银室。
我們還是用剛才生成的JS格式數(shù)據(jù)來(lái)練習(xí):
#!/usr/bin/python3
import json
jsonData = '''[
{
"a": 1,
"b": 2,
"c": 3,
"d": true,
"e": false,
"f": null
}
]'''
data = json.loads(jsonData)
print(data)
輸出結(jié)果:
[{'a': 1, 'b': 2, 'c': 3, 'd': True, 'e': False, 'f': None}]
可以看出結(jié)果變成了Python能使用的數(shù)據(jù)涂佃。
剩下的json.dump()和json.load()用來(lái)處理JSON文件的:
#!/usr/bin/python3
import json
data = [{
'a': 1,
'b': 2,
'c': 3,
'd': True,
'e': False,
'f': None
}]
# 寫入 JSON 數(shù)據(jù)
with open('data.json', 'w') as f: #在代碼當(dāng)前目錄生成一個(gè)data.json的文件
json.dump(data, f)
# 讀取數(shù)據(jù)
with open('data.json', 'r') as f: #讀取當(dāng)前目錄的json文件并解碼成python數(shù)據(jù)
data = json.load(f)
print(data)
如果覺(jué)得生成的JSON文件中格式不好看,可以把文件內(nèi)容拷貝到在剛才的線校驗(yàn)工具左邊欄中并雙擊蜈敢!
把格式化之后的拷到文件中覆蓋即可巡李。