Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29951000
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: 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也提供了创建对象的方法,为面向对象程序员提供了令人舒适的类定义和相似性。

阅读(1752) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~