错误理解:
一直以为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.简单值:
1 5//这是JSON表示数值5的方式; 2 "Hello world"//JSON表示字符串的过程
区别:
1)js字符串与JSON字符串的最大区别:JSON字符串必须使用双引号(单引号会导致语法错误);
2)布尔值与null也是有效的JSON形式。
2.对象:
①js中的对象字面量(是不是自己内心想象的JSON对象?key:value形式,error!)
1 var person = { 2 name:"王五", 3 age:22 4 }
②JSON中的对象要求给属性加引号:
所以上面的的对象字面量又可以这样表示:
1 var person = { 2 "name":"王五", 3 "age":22};
JSON表示上述对象的方式如下:
1 { 2 "name":"王五", 3 "age":22 4 }
对比一下,有区别吗?
1.JSON中没有变量的概念,故并没有声明变量;
2.末尾没有分号。
谨记:对象的属性必须加双引号。
3.数组:
JSON数组采用JS中的数组字面量形式。
1 var values = [25,"hello",true];//js中的数组字面量
1 [25,"hello",true] //JSON中的数组表示
果然,JSON数组中既没有变量也没有分号。
解析与序列化
1.JSON.stringify();
2.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 对象的信息,本质是一个字符串。
JavaScript高级程序设计:563-570页。