免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1342 | 回复: 0
打印 上一主题 下一主题

使用JSON [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-26 15:10 |只看该作者 |倒序浏览

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


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/55983/showart_1667370.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP