1.JSON的定義
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式
珊楼,它完全獨(dú)立于語(yǔ)言的文本格式袜漩。
- 很多JavaScript開發(fā)人員都錯(cuò)誤地把JavaScript
對(duì)象字面量(Object Literals)
稱為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文件讀壬胪纭)的話雹顺,那它就是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類型 | JSON 的不同點(diǎn) |
---|---|
對(duì)象和數(shù)組 | 屬性名稱必須是雙引號(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ù)交換格式鸳碧。 易于人閱讀和編寫。同時(shí)也易于機(jī)器解析和生成犬性。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個(gè)子集瞻离。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)乒裆。 這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言套利。