前言
以前写代码的时候,一直搞不清JSON和JavaScript中对象的关系。今天看《高三》的时候,总算弄明白了。
JSON
JSON全称(JavaScript Object Notation,JavaScript 对象表示法),所以JSON和js关系挺大的。本质上JSON是一种数据格式。这里重点要注意的是“数据格式”。之所以叫做JSON,是因为这种格式是基于js的某些语法的。
JSON语法
JS是一种数据格式,这种格式可以用来表示三种类型的值。这三种类型都是从js语法中直接拿过来的。三种类型的值:
- 简单值 :使用与 JavaScript 相同的语法,可以在 JSON 中表示字符串、数值、布尔值和 null。但 JSON 不支持 JavaScript 中的特殊值 undefined。例如:”str” 、123、false、null是JSON里面的值,undefined不是JSON里面的值
- 对象:对象作为一种复杂数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。
例如:
var json = { “name”:”zhangsan”,”age”:123 } - 数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。例如 [1.’222’,null] (和数组类型长得一样)
注意事项
1、JSON中没有undefined
2、JSON在表示对象值的时候,属性必须加双引号
3、数据和对象可以相互嵌套,对象和数组通常是 JSON 数据结构的最外层形式(当然,这不是强制规定的)
例如:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22var json = {
name:"zhangsan" ,//错误,name应该加双引号"name"
"age": undefined, //错误,JSON中没有undefined
"personList":[
{
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas"
],
edition: 3,
year: 2011
},
{
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas"
],
edition: 2,
year: 2009
},
] //正确,数组和对象可以相互嵌套。
}
解析与序列化
JSON 对象有两个方法:stringify()和 parse() ,作用和其英文 含义一样。
1 | var book = { |
这个例子使用 JSON.stringify()把一个 JavaScript 对象序列化为一个 JSON 字符串,然后将它保
存在变量 jsonText 中。默认情况下,JSON.stringify()输出的 JSON 字符串不包含任何空格字符或
缩进,因此保存在 jsonText 中的字符串如下所示:
{“title”:”Professional JavaScript”,”authors”:[“Nicholas C. Zakas”],”edition”:3,
“year”:2011}
将 JSON 字符串直接传递给 JSON.parse()就可以得到相应的 JavaScript 值。例如,使用下列代码
就可以创建与 book 类似的对象:
var bookCopy = JSON.parse(jsonText);
注意,虽然 book 与 bookCopy 具有相同的属性,但它们是两个独立的、没有任何关系的对象。
如果传给 JSON.parse()的字符串不是有效的 JSON,该方法会抛出错误。
stringify() 和 parse()的其它用法
这俩个方法都有回调函数,具体用法可以在《高三》中看到。我觉得自己能记住,就不写在了。