JSON:JavaScript 对象表示法(JavaScript Object Notation)
JSON 语法规则
数据在名称/值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
JSON有6种类型的值:
对象、数组、字符串、数字、布尔值、null
JSON对象是一个容纳“名/值”对的无序集合
名字:任意字符串
值:任意类型的JSON值,包括数组和对象(对象中可以嵌入对象)
注:JSON字符串必须使用双引号(单引号会报错)
一、对象
javascript中创建字面量:
1
2
3
4
|
var
object = {
name:
"lily"
,
age:22
};
|
或者:
1
2
3
4
|
var
object = {
"name"
:
"lily"
,
"age"
:22
};
|
JSON:
1
2
3
4
|
{
"name"
:
"lily"
,
"age"
:22
}
|
二、数组
JSON数组采用的是javascript中数组字面量形式
例如,JSON中 :
[ "lily",25,"docter"]
同样要注意, JSON 数组也没有变量和分号。把数组和对象结合起来,可以构成更复杂的数据集合。
扩展:
把数组和对象结合起来可以构成更复杂的数据结合
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[
{
"name"
:
"lily"
,
"age"
:22,
"job"
:
"docter"
},
{
"name"
:
"nicy"
,
"age"
:21,
"job"
:
"teacher"
},
{
"name"
:
"lily"
,
"age"
:22,
"job"
:
"AE"
}
]
|
三、解析与序列化
JSON拥有和javascript类似的语法,可以把JSON数据结构解析为有用的javascript对象
1.JSON对象
收发JSON数据
读取、写入、发送和接收JSON数据对象时,需要转换成字符串,并能从字符串转换为JSON数据对象。(用于javascript相同的方式读写他们)
JSON对象有两个方法:
① stringify(): 把javascript对象序列化为JSON字符串
② parse(): 把JSON字符串解析为原生的javascript值
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
var
book = {
title:
"professional JavaScript"
,
authors:[
"lily"
],
edition:3,
year:2011
};
var
jsonText = JSON.stringify(book);
alert(jsonText);
//{"title":"professional JavaScript","authors":["lily"],"edition":3,"year":2011}
alert(
typeof
jsonText);
//string
var
bookCopy = JSON.parse(jsonText);
alert(
typeof
bookCopy);
//object
|
这个例子中使用JSON.stringify()把一个javascript对象book序列化为一个JSON字符串,然后保存到jsonText中;将JSON字符串jsonText直接传给JSON.parse()就得到了相应的javascript值
注:序列化javascript对象时,最终值都是有效JSON数据类型的实例属性,任何无效的值都会被跳过
2.序列化选项
JSON.stringify()在序列化javascript对象时,可以接收两个参数
参数一:过滤器,可以是一个数组或函数
参数二:一个选项,表示是否在JSON字符串中保留缩进
1)过滤结果
如果过滤器的参数是数组,那么JSON.stringify()的结果中只包含数组中列出的属性
例如:
1
2
3
4
5
6
7
8
9
10
11
|
var
book = {
"title"
:
"professional JavaScript"
,
"authors"
:[
"lily"
],
edition:3,
year:2011
};
var
jsonText = JSON.stringify(book,[
"title"
,
"edition"
]);
alert(jsonText);
//{"title":"professional JavaScript","edition":3}
alert(
typeof
jsonText);
// string
|
2)字符串缩进:
JSON.stringify()方法的第三个参数用于控制结果中的缩进和空白符
3)toJSON()方法
给对象定义toJSON()方法,可以返回其自身的JSON数据格式
四、JSON访问值
第一种:简单数组
['item1','item2','item3']
取值:通过数字索引访问嵌入的值(第一项的索引为0)
1
2
3
|
[
'item1'
,
'item2'
,
'item3'
]
var
items = [
'item1'
,
'item2'
,
'item3'
];
alert(items[0]);
// item1
|
第二种:使用{}表示对象
{ "key":"value" }
取值:通过键名访问嵌入的值
1
2
3
|
var
oExample = {
"name"
:
"lily"
};
alert(oExample.name);
// lily
alert(oExample[
"name"
]);
// lily
|
使用这两种方式,可以用子记录(带命名的或数值的索引键)描述很多数据结构:
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
var
oNovelist = {
"firstName"
:
"lily"
,
"lastName"
:
"russ"
,
"novels"
:
[
{
"title"
:
"and choas died"
,
"year"
:
"1970"
},
{
"title"
:
"the famale man"
,
"year"
:
"1976"
}
]
};
var
msg = oNovelist.firstName+
" "
+oNovelist.lastName+
"'s"
+
" "
+oNovelist.novels[0].title+
" "
+
"was published in"
+oNovelist.novels[0].year;
alert(msg);
// lily russ's and choas died was published in1970
|