错误理解:
一直以为 JSON 就是对象, 拥有跟 js 对象类似的特征:{key:value} 的形式,
以至于在自己的思维定式中就出现了一种很可怕的情景: 居然不知道怎么去解释习以为常的 json 是个什么? 各种混淆, 结果 ---> 后果很严重.
概念区分:
1.JSON:(JavaScript Object Notation,js 对象表示法);
2.JSON 是一种数据格式, 而不是一种编程语言;
3.JSON 与 js 具有相同的语法格式, 但是 JSON 并不从属于 js;
4. 并非只有 js 才使用 JSON, 很多编程语言都有针对 JSON 的解析器和序列化器.
JSON 键值对是用来保存 JS 对象的一种方式, 和 JS 对象的写法也大同小异, 键 / 值对组合中的键名写在前面并用双引号 "" 包裹, 使用冒号 : 分隔, 然后紧接着值.
语法:
JSON 的语法可以表示以下三种类型的值:
1. 简单值;
2. 对象;
3. 数组.
错误理解: 墨守成规的以为 JSON 只是个对象或者数组, 然后以数组或者对象的标准来衡量它,
但却没有考虑它们之间的差异性, 最后 "一失足成千古恨".
举例说明:
1. 简单值:
- 5// 这是 JSON 表示数值 5 的方式;
- "Hello world"//JSON 表示字符串的过程
区别:
1)js 字符串与 JSON 字符串的最大区别: JSON 字符串必须使用双引号 (单引号会导致语法错误);
2) 布尔值与 null 也是有效的 JSON 形式.
2. 对象:
js 中的对象字面量 (是不是自己内心想象的 JSON 对象? key:value 形式, error!)
1var person = { 2 name:"王五", 3 age:22 4 }
JSON 中的对象要求给属性加引号:
所以上面的的对象字面量又可以这样表示:
- var person = {
- "name":"王五",
- "age":22};
JSON 表示上述对象的方式如下:
- {
- "name":"王五",
- "age":22
- }
对比一下, 有区别吗?
1.JSON 中没有变量的概念, 故并没有声明变量;
2. 末尾没有分号.
谨记: 对象的属性必须加双引号.
3. 数组:
JSON 数组采用 JS 中的数组字面量形式.
- 1 var values = [25,"hello",true];//js 中的数组字面量
- 1 [25,"hello",true] //JSON 中的数组表示
果然, JSON 数组中既没有变量也没有分号.
解析与序列化
- JSON.stringify();
- JSON.parse();
3.toJSON.
是不是耳熟能详的方法? 还好有机会重温一下, 也好改正自己的短处:
1.JSON 对象有两个方法: stringify() 以及 parse(), 其实就是把 js 对象序列化为 JSON 字符串和把 JSON 字符串解析为原生 js 值. 默认情况下, JSON.stringify() 输出的 JSON 字符串不包含任何的空格字符串或缩进;
2. 当 JSON.stringify()
接受一个参数的时候 (上述情景),JSON 就是把 js 对象序列化为 JSON 字符串;
当 JSON.stringify() 接受两个参数, 且第二个参数为数组的时候, 代表结果中只包含数组中列出的属性; 而当第二个参数为函数时, 情况稍微有点不一样, 函数返回的值就是相应键的值. 不过, 当函数返回 undefined, 那么相应的属性会被忽略即被删除;
当其接受三个参数的时候, 第三个参数用于控制结果中的缩进和空白符.
小结:
JSON 是一个轻量级的数据格式, 可以简化表示复杂数据结构的工具量.
JSON vs js:JSON 是 JS 对象的字符串表示法, 它使用文本表示一个 JS 对象的信息, 本质是一个字符串.
在 JS 语言中, 一切都是对象. 因此, 任何支持的类型都可以通过 JSON 来表示, 例如字符串, 数字, 对象, 数组等.
但是对象和数组是比较特殊且常用的两种类型.
对象: 对象在 JS 中是使用花括号包裹 {} 起来的内容, 数据结构为 {key1:value1, key2:value2, ...} 的键值对结构. 在面向对象的语言中, key 为对象的属性, value 为对应的值. 键名可以使用整数和字符串来表示. 值的类型可以是任意类型.
数组: 数组在 JS 中是方括号 [] 包裹起来的内容, 数据结构为 ["java", "javascript", "vb", ...] 的索引结构. 在 JS 中, 数组是一种比较特殊的数据类型, 它也可以像对象那样使用键值对, 但还是索引使用得多. 同样, 值的类型可以是任意类型.
JavaScript 高级程序设计:563-570 页.
来源: https://www.cnblogs.com/zhengyeye/p/8934528.html