1.JSON的定义
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式
,它完全独立于语言的文本格式。
- 很多JavaScript开发人员都错误地把JavaScript
对象字面量(Object Literals)
称为JSON对象
(JSON Objects),但是该规范里也明确地说了JSON只是一个数据交换格式,只有我们将之用在string上下文的时候它才叫JSON。 - 何时是JSON,何时不是JSON
{ "prop": "val" } 这样的声明有可能是JavaScript对象字面量也有可能是JSON字符串,取决于什么上下文使用它,如果是用在string上下文(用单引号或双引号引住,或者从text文件读取)的话,那它就是JSON字符串,如果是用在对象字面量上下文中,那它就是对象字面量。
// 这是JSON字符串var foo = '{ "prop": "val" }'; // 这是对象字面量 var bar = { "prop": "val" };
2.JSON和JavaScript的关系
JSON 用来序列化对象、数组、数值、字符串、布尔值和 null 。它基于 JavaScript 语法,但与之不同:JavaScript不是JSON,JSON也不是JavaScript。
- JavaScript 与 JSON 的区别
JS类型 | JSON 的不同点 |
---|---|
对象和数组 | 属性名称必须是双引号括起来的字符串;最后一个属性后不能有逗号。 |
数值 | 禁止出现前导零( JSON.stringify 方法自动忽略前导零,而在 JSON.parse 方法中将会抛出 SyntaxError);如果有小数点, 则后面至少跟着一位数字。 |
字符串 | 只有有限的一些字符可能会被转义;禁止某些控制字符; Unicode 行分隔符 (U+2028) 和段分隔符 (U+2029) 被允许 ; 字符串必须用双引号括起来。请参考下面的示例,可以看到 JSON.parse() 能够正常解析,但将其当作JavaScript解析时会抛出 SyntaxError 错误: |
let code = '"\u2028\u2029"';
JSON.parse(code); // 正常
eval(code); // 错误
3.JSON的应用场景
- JSON用于数据交换
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。