1.JSON的定義
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,它完全獨(dú)立于語(yǔ)言的文本格式。
- 很多JavaScript開(kāi)發(fā)人員都錯(cuò)誤地把JavaScript
對(duì)象字面量(Object Literals)稱(chēng)為JSON對(duì)象(JSON Objects),但是該規(guī)范里也明確地說(shuō)了JSON只是一個(gè)數(shù)據(jù)交換格式,只有我們將之用在string上下文的時(shí)候它才叫JSON。 - 何時(shí)是JSON,何時(shí)不是JSON
{ "prop": "val" } 這樣的聲明有可能是JavaScript對(duì)象字面量也有可能是JSON字符串,取決于什么上下文使用它,如果是用在string上下文(用單引號(hào)或雙引號(hào)引住,或者從text文件讀?。┑脑?huà),那它就是JSON字符串,如果是用在對(duì)象字面量上下文中,那它就是對(duì)象字面量。
// 這是JSON字符串var foo = '{ "prop": "val" }'; // 這是對(duì)象字面量 var bar = { "prop": "val" };
2.JSON和JavaScript的關(guān)系
JSON 用來(lái)序列化對(duì)象、數(shù)組、數(shù)值、字符串、布爾值和 null 。它基于 JavaScript 語(yǔ)法,但與之不同:JavaScript不是JSON,JSON也不是JavaScript。
- JavaScript 與 JSON 的區(qū)別
| JS類(lèi)型 | JSON 的不同點(diǎn) |
|---|---|
| 對(duì)象和數(shù)組 | 屬性名稱(chēng)必須是雙引號(hào)括起來(lái)的字符串;最后一個(gè)屬性后不能有逗號(hào)。 |
| 數(shù)值 | 禁止出現(xiàn)前導(dǎo)零( JSON.stringify 方法自動(dòng)忽略前導(dǎo)零,而在 JSON.parse 方法中將會(huì)拋出 SyntaxError);如果有小數(shù)點(diǎn), 則后面至少跟著一位數(shù)字。 |
| 字符串 | 只有有限的一些字符可能會(huì)被轉(zhuǎn)義;禁止某些控制字符; Unicode 行分隔符 (U+2028)和段分隔符 (U+2029)被允許 ; 字符串必須用雙引號(hào)括起來(lái)。請(qǐng)參考下面的示例,可以看到 JSON.parse() 能夠正常解析,但將其當(dāng)作JavaScript解析時(shí)會(huì)拋出 SyntaxError 錯(cuò)誤: |
let code = '"\u2028\u2029"';
JSON.parse(code); // 正常
eval(code); // 錯(cuò)誤
3.JSON的應(yīng)用場(chǎng)景
- JSON用于數(shù)據(jù)交換
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。 易于人閱讀和編寫(xiě)。同時(shí)也易于機(jī)器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個(gè)子集。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類(lèi)似于C語(yǔ)言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。