不颓废了,加油!我可以的。
本章内容
理解JSON语法
解析JSON
序列化JSON
对于json最重要的是理解它是一种数据结构,一种表示数据结构化的格式。而不是编程语言,很多编程语言都有对json的解析器和序列化器。
语法
json的语法可以表示三种类型的值:
简单值:使用与JavaScript相同的语法,可以表示null,number,String,boolean,但是不能表示undefined。比如 5,就是json表示的数值5的方式。“Hello World”就是字符串的方式。不过json的字符串必须使用双引号。
对象:无序的键值对,每个键值对中的值,可以是简单值,也可以是复杂的。同JavaScript 3个区别是,1、必须属性名必须加双引号,单引号也不行,比如
{ "name":"WangHaiyang" ,
"age":29 }
JavaScript 中var person = { name: "Nicholas", age: 29 };
2、使用逗号隔开,不是JavaScript语法,所以不是分号。
3、没有变量的概念,不能声明变量。
数组:一组有序的值的列表,可以通过数值索引来访问其中的值。 在JavaScript中var values = [25, "hi", true]; 在JSON 中,一个数组为[25, "hi", true],
更复杂的是json的数组这能够每一项都是对象。
[ {
"title": "Professional JavaScript",
"authors": [ "Nicholas C. Zakas" ],
edition: 3, year: 2011 },
{
"title": "Professional JavaScript",
"authors": [ "Nicholas C. Zakas" ],
edition: 2, year: 2009 }
]
这个数组里包含了一些表示图书的对象。每个对象几个属性。某个属性又可以是一个数组。
解析与序列化
JSON对象有两个方法:
stringfy():把JavaScript对象序列化成为json字符串。
parse():把json字符串解析为原生的JavaScript值。
此外还有一个eval()可以解析、解释并返回JavaScript对象和数组。
举例子:
得到字符串如下:
{"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3,"year":2011}
同理,可以var bookCopy = JSON.parse(jsonText);
JSON.stringify() 还可以接受两个参数,这两个参数用于指定不同方式序列化JavaScript对象。第一个参数是过滤器,可以是一个数组也可以是一个函数。第二个参数是一个过滤器,表示是否在json字符串中保留缩进。比如:
过滤器:
返回的结果字符串中,只包含这两个过滤的属性:{"title":"Professional JavaScript","edition":3}
如果是函数,函数会接收两个参数,属性名和属性值。如下:
函数过滤器会根据传入的键来决定结果
字符串缩进:JSON.stringfy() 第三个参数用来控制结果中的缩进和空白符。如果是一个数字,表示每个级别缩进的空格数。
如果缩进参数是一个字符不是数字,则表示用字符来缩进。如下:
var jsonText = JSON.stringify(book, null, " - -");得到:
{
--"title": "Professional JavaScript",
--"authors": [ ----"Nicholas C. Zakas" --],
--"edition": 3,
--"year": 2011
}
字符串不能超过10个,超过了,只取前10个。
toJSON方法,省略。
JSON.parse()
可以接收另一个参数,该参数是一个函数,这个函数接收两个参数,就是键名和键值。
总结
JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量。JSON使用JavaScript语法的子集表示对象、数组、字符串、数值、布尔值和null。即使XML也能表示同样复杂的数据结果,但JSON没有那么烦琐,而且在JavaScript中使用更便利。
ECMAScript5定义了一个原生的JSON对象,可以用来将对象序列化为JSON字符串或者将JSON数据解析为JavaScript象。JSON.stringify()和JSON.parse()方法分别用来实现上述两项功能。
网友评论