一咆畏、什么是json松邪?
json的全稱為:JavaScript Object Notation礼饱,是一種輕量級(jí)的數(shù)據(jù)交互格式践宴。它基于 ECMAScript (歐洲計(jì)算機(jī)協(xié)會(huì)制定的js規(guī)范)的一個(gè)子集鲸匿,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)∽杓纾【以上來(lái)自于百度百科】
簡(jiǎn)單來(lái)說(shuō):json就是一種在各個(gè)編程語(yǔ)言中流通的數(shù)據(jù)格式带欢,負(fù)責(zé)不同編程語(yǔ)言中的數(shù)據(jù)傳遞和交互。
類似于:
- 國(guó)際通用語(yǔ)言-英語(yǔ)
- 中國(guó)56個(gè)民族不同地區(qū)的通用語(yǔ)言-普通話烤惊。
但真要說(shuō)json到底是什么乔煞,以及json的作用,我們總是難以描述柒室,下面我將從各個(gè)方面來(lái)進(jìn)行說(shuō)明:
二渡贾、與javascript的關(guān)系
相信很多程序員只要一提到j(luò)son總會(huì)想到j(luò)s,因?yàn)閖son不僅含有js的名字雄右,其格式也與js中對(duì)象(object)的格式并無(wú)一二空骚。
這里我們要進(jìn)行一個(gè)說(shuō)明,首先json是基于ECMAScript語(yǔ)法不脯,但這并不意味著json必須在js中使用府怯,或者必須要產(chǎn)生什么聯(lián)系,json在js中的處理也并沒(méi)有比其他語(yǔ)言占有更多優(yōu)勢(shì)防楷。只是因?yàn)檎Z(yǔ)法相似,而使得js開(kāi)發(fā)者能更快的上手json而已则涯。
事實(shí)上幾乎所有編程語(yǔ)言中都有對(duì)json數(shù)據(jù)轉(zhuǎn)換的支持:
js中复局,json與對(duì)象的轉(zhuǎn)換:JSON.parse()
/JSON.stringify()
;
php中,json與數(shù)組的轉(zhuǎn)換:json_encode()
/json_decode()
;
java中粟判,json與對(duì)象的轉(zhuǎn)換:fromJson()
/toJson()
;
python中亿昏,json與對(duì)象的轉(zhuǎn)換:json.dumps()
/json.loads()
;
三、語(yǔ)法格式
那么json的語(yǔ)法格式到底是怎樣的呢档礁?我們先來(lái)看一段json數(shù)據(jù):
{"name":"admin","age":18}
這就是一種最簡(jiǎn)單的json角钩,如果有學(xué)過(guò)js的開(kāi)發(fā)者是不是發(fā)現(xiàn)json的語(yǔ)法與js中object的語(yǔ)法幾乎相同。
但是呻澜,注意:
- json是一種純字符數(shù)據(jù)递礼,不屬于編程語(yǔ)言
- json的語(yǔ)法與js中object的語(yǔ)法幾乎一致(下一部分說(shuō)明不同)
- json數(shù)據(jù)以鍵值對(duì)形式存在,多個(gè)鍵值對(duì)之間用逗號(hào)
,
隔開(kāi)羹幸,鍵值對(duì)的鍵和值之間用冒號(hào):
連接 - json數(shù)據(jù)在js對(duì)象的基礎(chǔ)上做了嚴(yán)格化
- json數(shù)據(jù)中的鍵值對(duì)可以使用編程語(yǔ)言中所謂的關(guān)鍵字(*見(jiàn)注意事項(xiàng))
- json的數(shù)據(jù)可以用花括號(hào)
{}
或中括號(hào)[]
包裹脊髓,對(duì)應(yīng)js中的object和array
四、注意事項(xiàng)
為什么說(shuō)幾乎相同栅受,而不是完全相同呢将硝?接下來(lái)我們要說(shuō)的就是json與js中對(duì)象的不同點(diǎn)恭朗,也是json嚴(yán)格要求的部分:
- json的鍵值對(duì)的鍵部分,必須用雙引號(hào)
"
包裹依疼,單引號(hào)都不行(所以如果在鍵中出現(xiàn)了關(guān)鍵字痰腮,也被字符化了),而js中對(duì)象沒(méi)有強(qiáng)制要求(所以在鍵中不允許出現(xiàn)關(guān)鍵字) - json的鍵值對(duì)的值部分律罢,不允許出現(xiàn)函數(shù)
function
膀值,undefined
,NaN
弟翘,但是可以有null
虫腋,js中對(duì)象的值中可以出現(xiàn) - json數(shù)據(jù)結(jié)束后,不允許出現(xiàn)沒(méi)有意義的逗號(hào)
,
如:{"name":"admin","age":18,}
稀余,注意看數(shù)據(jù)結(jié)尾部分18的后面的逗號(hào)悦冀,不允許出現(xiàn)
五、總結(jié)
所以睛琳,json數(shù)據(jù)的格式可以是:
{"name":"admin","age":18}
也可以是:
["hello",3.1415,"json"]
還可以是:
[{"name":"admin","age":18},{"name":"root","age":16},{"name":"張三","age":20}]
不能是:(key沒(méi)有雙引號(hào))
{"name":"admin",age:18}
不能是:(無(wú)意義的逗號(hào))
{"name":"admin","age":18,}
不能是:(不允許出現(xiàn)函數(shù))
{"name":"admin","age":18,"show":function()()}
不能是:(不允許出現(xiàn)undefined)
{"name":"admin","age":18,"show":undefined}
不能是:(不允許出現(xiàn)NaN)
{"name":"admin","age":18,"strong":NaN}
不能是:(無(wú)意義的逗號(hào))
["hello",3.1415,"json",]
不能是:(無(wú)意義的逗號(hào))
[{"name":"admin","age":18},{"name":"root","age":16},{"name":"張三","age":20},]
以上內(nèi)容盒蟆,希望能對(duì)以后使用json有所幫助
其實(shí)作為通用數(shù)據(jù),xml也是一種不錯(cuò)的選擇师骗,但是隨著json的出現(xiàn)历等,xml的使用場(chǎng)景正慢慢被json蠶食,相對(duì)來(lái)說(shuō)json在某些方面下的體現(xiàn)還是比xml稍具優(yōu)勢(shì)辟癌,后期可再開(kāi)一篇文檔說(shuō)明json和xml的區(qū)別寒屯。
如有不全或錯(cuò)誤,歡迎留言指出黍少,謝謝支持……^?_?^