理解JSON,最重要的是理解它是一种数据格式,而不是一种编程语言。JSON虽然利用了JavaScript的一些模式,但JSON并不从属于JavaScript,很多编程语言都可以用JSON来传递数据。
JSON的语法:
学习JSON的语法,你只需知道以下三种类型的值。
1.简单值:也就是JavaScript中的字符串、数值、布尔值、null。
①,JSON不支持JavaScript的undefined。
②,json字符串必须用双引号,不能使用单引号。
在实际应用中,json更多地用来表示更复杂的数据结构,简单值只是构成整个json数据的基本单元。
2.对象:和JavaScript对象很相似,但是也有几个注意点。
①,json中对象的属性需加上引号。(这是手工编写json时最容易犯的错)
②,json对象没有声明。
③,末尾没有分号。
举个例子:
javascript对象字面量:
var JSobject = {
name :"wlk",
age : 22,
school : {
name : "muc",
locaton : "BeiJing"
}
};
json对象:
{ //没有声明
"name" :"wlk",
"age" : 22, //json对象的属性必须加上引号
"school" : {
"name" : "muc",
"locaton" : "BeiJing"
}
} //末尾没有分号
上面的json对象中有两个name属性,但由于它们分属于不同的对象,所以没有问题,但是同一个对象中决不能出现同名属性。
3.数组
:JSON的第二种复杂的数据类型就是数组,同样要注意JSON数组没有变量和分号。对象和数组通常是JSON数据格式的最外层形式。
比如:
[ //以数组为最外层形式
{
"name":"wlk",
"age":22
},
{
"name":"wang",
"school":{
"name":"MUC",
"location":"Beijing"
}
},
]
json文本与js对象的转换:(详解请解读《JavaScript高级程序设计3》第565页)
ECMAScript5对解析json的行为进行了规范,定义了全局对象JSON。
全局JSON对象有两个方法:stringify()和parse()。
这两个方法就能完成JavaScript对象与json文本之间的转换。
JavaScript对象序列化为json文本:JSON.stringify()。
该方法可接受三个参数:
第一个参数是需要序列化的JavaScript对象。
第二个参数为可选参数,它是个过滤器,可以是数组或函数。
第三个参数也为可选参数,用于控制结果中的缩进和空白符。传第三个参数时,第二个参数也要传,如果没有过滤条件就传null。
有些对象会定义有toJSON()方法,返回其自身的JSON数据格式。例如原生Date对象。我们当然也可以给自定义对象添加toJSON()方法。
json文本解析为JavaScript对象:JSON.parse()。
该方法可接受两个参数:
第一个是要解析的json文本。
第二个是一个函数。它会对json数据的每个键值对做一些处理。比如日期字符串经常要使用它进行日期的转换。