9 javascript JSON

来源:互联网 发布:淘宝店标logo生成器 编辑:程序博客网 时间:2024/06/05 16:19
JSON是一种数据格式,不是一种编程语言。


一.语法
json的语法可以表示以下三种类型的值:
简单值:使用与javascript相同的语法,可以在JSON中表示字符串、数值、布尔值和NULL。但JSON不支持JavaScript中的特殊值undefined
对象:对象作为一种复杂的数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值、也可以是复杂数据类型的值
数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组
JSON不支持变量、函数和对象实例,它就是一种表示结构化数据的格式,虽然与JavaScript中表示数据的某些语法相同,但它并不局限于JavaScript的范畴

1.简单值
最简单的JSON数据形式就是简单值。例如:

这是JSON表示数值5的方式。类似地,下面是JSON表示字符串的方式:
"Hello world!"
JavaScirpt字符串与JSON字符串的最大区别在于,JSON字符串必须使用双引号

2.对象
JSON中的对象与JavaScript字面量稍微有一些不同。下面是一个JavaScirpt中的对象字面量:
var person = {
name : "Nicholas",
age : 29;
};
这虽然是开发人员在JavaScirpt中创建对象字面量的标准形式,但JSON中的对象要求给属性加引号。实际上,在JavaScript中,前面的对象字面量完全可以写成下面这样:
var object = {
"name" : "Nicholas",
"age" : 29
};
JSON表示上述对象的方式如下:
{
"name" : "Nicholas",
"age" : 29
}
没有分号

{
"name" : "Nicholas",
"age" : 29,
"school" : {
"name" : "Merrimack College",
"location" : "Morth Andover, MA"
}
}
同一个对象中绝对不可以出现两个同名属性
JSON中对象的属性名任何时候都必须加双引号

3.数组 
数组字面量:
[25, "hi", true]
同样注意,JSON数组没有变量和分号。把数组和对象结合起来,可以构成更复杂的数据集合,例如:
[
{
"title" : "Professional JavaScript",
"authors" : [
"Nicholas C. Zakas"
],
"edition" : 3,
"year" : 2011
},
{
...
}
]

二.解析与序列化
1.JSON对象 
JSON对象有两个方法:stringify()和parse()。在最简单的情况下,这两个方法分别用于把JavaScirpt对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript值。
var book = {
title : "Professional JavaScript",
authors : [
"Nicholas C. Zakas"
],
edition : 3,
year : 2011
};

// {"title":"Professional JavaScript", "autoors"...}
var jsonText = JSON.stringify(book);

var bookCopy = JSON.parse(jsonText);

注意,虽然book与bookCopy具有相同的属性,但他们是独立的

2.序列化选项
1.过滤结果
如果过滤参数是数组,那么JSON.stringify()的结果将只包含数组中列出的属性。来看下面的例子:
var book = {
"title" : "Professional JavaScript",
"authors" : [
"Nicholas C. Zakas"
],
edition : 3,
year : 2011
};
var jsonText = JSON.stringify(book, ["title", "edition");// {"title":"Professional JavaScript","edition":3}

第二个参数还可传入函数进行过滤

2.字符串缩进
JSON.stringify()方法的第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示的是每个级别缩进的空格数
 如果是一个字符串,将字符串用作缩进
会自动换行

3.toJSON()方法
为对象添加toJSON()方法,比如:
var book = {
"title" : "Professional JavaScript",
"authors" : [
"Nicholas C. Zakas"
],
edition : 3,
year : 2011,
toJSON : function(){
return this.title;
}
};

var jsonText = JSON.stringify(book);

3.解析选项
var book = {
"title" : "Professional JavaScript",
"authors" : [
"Nicholas C. Zakas"
],
edition : 3,
year : 2011,
releaseDate : new Date(2011, 1, 1)
};

var jsonText = JSON.stringify(book);

var bookCopy = JSON.parse(jsonText, function(key, value){
if (key == "realeaseDate"){
return new Date(value);
}else {
return value;
}
});

alert(bookCopy.releaseDate.getFullYear();

三.总结
JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量。JSON使用JavaScript语法的子集表示对象、数组、字符串、数值、布尔值和NULL。即使XML也能表示同样复杂
的数据结果,但JSON没有那么繁琐,而且在JavaScript中使用更便利
ES5定义了一个原生的JSON对象,可以用来将对象序列化为JSON字符串或者将JSON数据解析为JavaScript对象。
0 0