你真的理解json數(shù)據(jù)的格式么?
1. pythonz 字典與json字符串
在web服務(wù)領(lǐng)域,系統(tǒng)之間傳遞數(shù)據(jù)最常用的格式便是json,他很容易理解,因?yàn)榻^大多數(shù)場景下,你見到的json數(shù)據(jù)都和字典是一樣的。有時(shí),你復(fù)制一段json數(shù)據(jù)就可以把它當(dāng)做字典來使用,至少在python中是這樣的,然而它們之間并不能劃等號,下面的代碼將向你展示他們之間的不同
import json
data = {'text': "a/b/c", 3:4}
res = json.dumps(data)
print(res)
data2 = json.loads(res)
print(data2)
程序輸出結(jié)果
{"text": "a/b/c", "3": 4}
{'text': 'a/b/c', '3': 4}
python字典可以使用json.dumps方法轉(zhuǎn)為json字符串,但這個(gè)轉(zhuǎn)換后的字符串卻不一定能夠使用json.loads方法轉(zhuǎn)為python字典,原因在于,json字符串里,所有的key都必須是字符串。
2. json的格式
json數(shù)據(jù),從形式上看有兩種,一種是大括號形式的object,一種是中括號形式的數(shù)組。
對于這兩種形式的json數(shù)據(jù),我們很難用簡練的語言進(jìn)行描述,但畫圖卻可以將json數(shù)據(jù)的定義清晰的表達(dá)出來,先來看object 形式的json數(shù)據(jù)

看懂這張圖并不難
object 形式的json以{ 開頭,以} 結(jié)尾
圖中形成了一個(gè)閉環(huán),這表示這條閉環(huán)上的元素可以重復(fù)
大括號里的元素,使用逗號分隔
每個(gè)元素都是string : value 的形式,json數(shù)據(jù)里的key必須是字符串
大括號里也可以一個(gè)元素都沒有
圖中有很多whitespace,可以理解為空格,但這個(gè)空格實(shí)際使用時(shí)可有可無
再來看一下數(shù)組形式的json數(shù)據(jù)?

數(shù)組形式的json以[ 開始,以 ] 結(jié)束
中括號內(nèi)元素以逗號分隔
中括號里可以沒有任何元素
中括號里的元素是value
兩張圖里都出現(xiàn)了value,再將value的定義理解清楚,那么json數(shù)據(jù)的格式也就了然了

value的值可以是string,number,object,array,true,false,null
value前后也有whitespace
由于value可以是object和array,因此json可以嵌套很多層,這看起來和字典真的非常相似,關(guān)于json,其實(shí)還有很多細(xì)節(jié)的地方可以研究,不過掌握到這里對于我們認(rèn)識理解json就已經(jīng)足夠了,如果你想繼續(xù)深入研究,推薦你看這篇文章? ?https://www.json.org/json-en.html?
