文章标题

JSON是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。AJAX是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。之前也曾介绍过在PHP语言中使用JSON的文章,大家也可以看看,供参考。

虽然XML在Ajax运行中具有举足轻重的地位,但JavaScript开发人员很快就对它失去了兴趣。在JavaScript中操作XML存在严重的跨浏览器问题,而且从XML结构中提取数据也需要涉及遍历DOM文档,而这些操作都需要编写大量的代码。Douglas Crockford发明了一种叫JSON(JavaScript Object Notation)的数据格式却能够创建与XML相同的数据结构。JSON的基础是JavaScript语法中一个子集,特别是对象和数组字面量。JSON的设计意图是在服务器构建格式化数据,然后再将数据发送给浏览器。

由于JSON在JavaScript中相当于对象和数组,转换速度快,而且便于在JavaScript代码中访问,JSON在Ajax通信中越来越受开发人员的追捧。Web开发社区已经为几乎所有主流的语言都开发了JSON解析器和序列化器,使得通过服务器输出和使用JSON数据变得极为容易。

Douglas Crockford自己也维护着一个针对JavaScript的JSON序列化器/解析器,下载地址为http://www.json.org/js.html,可以去下载那个JavaScript文件,且该文件在所有浏览器都能正常使用。此外,IE8中包含了Crockford解析器的原生版本。

在Crockford的这个JSON库中,有一个全局对象,这个对象有两个方法:parse()和stringify()。其中,parse()方法接受两个参数:JSON文本和一个可选的过滤函数。在传入的文本是有效的JSON的情况下,parse()方法会返回传入数据的一个对象表示。下面是使用parse()方法的示例:

var object=JSON.parse(“()”);
与直接使用eval()不同的是这里不需要为传入的文本加圆括号。

第二个参数是一个函数,这个函数以一个JSON键和值作为参数。要想让作为参数传入的的键出现有结果对象中,该函数必须返回一个值。它的返回值将成为结果对象中与指定键关联的值,因此也就为我们重写默认的解析机制提供了机会。换句话说,在这个函数中针对某个键返回undefined,就会从结果对象中移除该键。如下面的例子所示:

var jsontext=”{“\name\”:\”WangGang\”,\”age\”:29,\”author\”:true }”;
var object=JSON.parse(jsontext,function(key,value){
switch(key){
case “age”: return value+1;
case “author”: return undefined;
default: return false;
}
});
alert(object.age) //30
alert(object.author) //undefined
在以上代码中,过滤函数会为每个”age”键的值加1,会移除数据中的”author”键,其他值则会原样返回。于是,结果对象中的age属性值就变成了30,但是却没有author属性,这种解析功能经常用于处理服务器返回的数据。假设addressbook.php会以下面的格式返回JSON数据:

{
{
“name”:”WangMeng”,
“email”:”wangmeng@some-domain-name.com”
},{
“name”:”LinTao”,
“email”:”linTao@some-domain-name.com”
},{
“name”:”Jim”,
“email”:”jim@some-domain-name.com”
}
}
可以发送一个Ajax请求取得以上数据,然后在客户端使用下列代码生成相应的

  • 元素:

    var xhr=createXHR();
    xhr.onreadystatechange=function(){
    if(xhr.readyState == 4){
    if((xhr.status >= 200 && xhr.status < 300)|| xhr.status == 304){
    var contacts=JSON.parse(xhr.responseText);
    var list=document.getElementById(“contacts”);
    for(var i=0,len=contacts.length;i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值