分类: Java
2008-11-26 15:10:47
JSON是语言的一个核心特征,它提供了一种创建数组的对象图(object graph)的简单机制。为了了解JSON,需要知道哦Javascript数组是如何工作的。我们首先来讨论一些关于他们的基础知识。
Javascript有一个内建的Array类,可以实用new 关键字初始化:
myLibrary.books=new Array();
数组有按照数字来分配的值,非常像传统的C或JAVA数组:
myLibrary.book[4] =somePredefinedBook;
数组也可以实用一个键值关联,像是JAVA的Map,实际上可以应用于任何javascript对象:myLibrary.books["BestSeller"]=somePredefinedBook;
这种语法对于微调很有利,但是作为首选来创建一个大型的数组或者对象就很乏味了。创建一个数字索引的数组的快捷方法是实用方括号,将所有的成员写成一个用逗号分隔的值的列表。就像这样:
myLibrary.books={
bestSeller:predefinedBook1,
cookbook:predefineBook2,
spaceFiller:predefinedBook3
};
在两种符号中,会忽略额外的空白,这允许我们为了清晰期间对代码做很好的格式处理。键的内部也可以有空白,可以在JSON符号中实用引号来引用,例如:
“best seller”:predefinedBook1;
我们可以通过嵌套JSON符号来创建复杂对象层次的单行定义(虽然会是很长的一行):
var myLibrary ={
location:"my house",
keywords:["root vegettables","turnip","tedium"],
books:[
{title:"书名1",
authors:[{name:"作者1",age:32},{name:"作者2",age:35}],
publicationData:"发行日期"
},
{title:"书名2",
authors:[{name:"作者1",age:32},{name:"作者2",age:35}],
publicationDate: new Date(2002,11,05)
}
]
}
在这里我们给myLibrary对象分配了三个属性:location是一个简单的字符串;keywords是一个按数字索引的字符串列表;books是一个按数字索引的对象列表,每个对象有标题(字符串),发布日期(代表javascript Date对象的字符串)和作者列表(数组)。每个作者由name和age参数来代表,JSON为我们提供了简练的机制来以单一的途径创建这些信息,否则就会花费很多行代码(以及更多的带宽)。
目光敏锐的朋友已经注意到,我们实用javascript Date对象来生成第2本书的发布日期。事实上,我们可以实用任何javascript代码来赋值,甚至是自定义函数:
function gunpowderPlot(){
return new Date(2007,01,24);
}
var volNum=“代码大全";
var turnipVol2={
title:"工具书:"+volNum,
authors:[
{name:"作者",age:35},
publicationDate:gunpowderPlot()
]
};
在这里,书的标题实用内嵌的表达式来计算,publicationDate设置为从预先定义的函数的返回值。
在前面的例子中。我们定义了函数gunpowderPlot(),该函数在对象创建时求值。我们也可以为使用JSON创建的对象定义成员函数,它在稍后可以通过该对象来调用:
var turnipVol2={
title:"工具书:"+volNum,
authors:[
{name:"作者",age:35},
publicationDate:gunpowderPlot()
]
bookprice:function(num){
if(!len){len=7;}
var p=this.title+"by"+this.author[0].name+"price:";
p+=num;
alert(p);
}
}
};
......................
turnipVol2.bookprice("89元");
bookprice函数具有标准javascript函数所有的特征,例如参数以及用this关键字标识的上下文对象。事实上,一但对象创建了,它仅仅是另外一个javascript对象,只要我们喜欢,可以混合匹配实用javascript和JSON符号。
我们可以实用javascript来微调实用JSON声明的对象:
var numbers ={one:1,two:2,three:3};
numbers.four=4;
我们最初实用JSON语法来定义一个对象,然后实用普通的javascript增加属性。同样的,我们一可以使用JSON扩展Javascript所创建的对象:
var cookbook =new object();
cookbook.author={
name:"ze";
borthday:new Date(####,##,##),
interests:["web design","sports","read"];
};
通过内建的javascript object和Array类以及JSON符号,可以创建我们喜欢的任何复杂的对象层,我们不需要其他任何东西。javascript也提供了创建对象的方法,为面向对象程序员提供了令人舒适的类定义和相似性。