理解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数据的每个键值对做一些处理。比如日期字符串经常要使用它进行日期的转换。