XML的代替者----JSON


Posted in Javascript onJuly 21, 2007

我个人觉得PHP与Javascript各有长处,如果能完美的结合起来,那将创造出许许多多的奇迹! 我是初次写此类文章,Bug难免,请各位指正~ 
    现在AJAX应用非常流行,而在AJAX中客户端Javascript和服务端动态脚本的通信是关键。如果传输的信息比较简单,通常我们会直接采用字符串的方式,如果信息结构复杂一点,则通常用XML文档。XML文档虽然应用广泛,但是用php生成和用Javascript处理却不是一件很容易的事情。这里我推荐一种XML文档的比较好简化替代方案:JSON! 
    首先我们来了解一下Javascript的基础知识。 
    1.创建数组,可以用JS内建的类Array来初始化,也可以用JSON符号"[]"。下面通过两种方式创建的arr1和arr2的实质是一样的: 

var arr1 = new Array(); 
arr1[0] = "apple"; 
arr1[1] = "google"; 
arr1[2] = "longbill"; 

var arr2 = ["apple","google","longbill"];
注意,数组的索引也可以是字符串,如 arr1["name"] = "longbill"; 这时的数组就相当于对象了。。。 
    2.创建对象,可以用JS内建的类Object来初始化,也可以用JSON符号"{}"。下面通过两种方式创建的obj1和ob2的实质也是一样的: 

var obj1 = new Object(); 
obj1.name = "longbill"; 
obj1.age = 18; 

var obj2 = { name:"longbill",age:18 };
注意,这里"{"和"}"之间必须写成"键:值"的形式,而且不同的"键:值"之间要用","分割。 "键"中也可以包含空格等特殊字符,此时要用""(引号)来引用,如 "phone number":123456 
    其实在JS中,数组的本质是一个对象,对象本身也是一个数组。所以, obj1.name 和 obj1["name"] 是同一个引用。 
    我们还可以通过JSON符号的嵌套来定义复杂的S对象: 

var people = [ 
    { 
        name:"longbill", 
        age:18 
    }, 
    { 
        name:"neal", 
        age:19 
    }, 
    { 
        name:"glocklee", 
        age:17 
    } 
];
//这个应该看的懂吧~~ 
大部分XML文档都可以用JSON来表达: 

<?xml version="1.0"?> 
<root> 
  <book> 
    <name>Ju love</name> 
    <price>$15</price> 
  </book> 
  <book> 
    <name>Javascrip</name> 
    <price>$25</price> 
  </book> 
</root>

如果用JSON就可以表达为: 


root: 

  { 
     name:"Ju love", 
     price:"$15" 
  }, 
  { 
     name:"Javascript", 
     price:"$25" 
  } 
]}

是不是简化很多? 

    而且客户端JS处理起来也很简单,只要用执行字符串函数 "eval" 就可以将JSON信息提取出来,而如果是XML文档,那就不的不用大量的标准DOM操作来提取其中的数据。如: 

//已经用AJAX从服务端下载了一个JSON文件(字符串),保存在变量 json 里 
eval("var myvar = "+json); 
//这样,JSON里的信息就表达在myvar这个变量里了。
缺点:一旦JSON的格式错误,将导致服务端JS系统错误,甚至崩溃。 
   解决办法: 
   最好在eval之前使用try(试探执行),如 

//已经用AJAX从服务端下载了一个JSON文件(字符串),保存在变量 json 里 
try { 
    eval("var myvar = "+json); 
} catch(e) { alert('json syntax error!'); } 
//这样,即使JSON格式错误,也只会弹出一个提示框,而不会抛出一个脚本错误!

Javascript 相关文章推荐
超清晰的document对象详解
Feb 27 Javascript
jquery 实现的全选和反选
Apr 15 Javascript
JavaScript验证图片类型(扩展名)的函数分享
May 05 Javascript
jQuery中each()方法用法实例
Dec 27 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
Aug 22 Javascript
详解Backbone.js框架中的模型Model与其集合collection
May 05 Javascript
JS遍历页面所有对象属性及实现方法
Aug 01 Javascript
Bootstrap 网站实例之单页营销网站
Oct 20 Javascript
jQuery弹出窗口打开链接的实现代码
Dec 24 Javascript
详解AngularJS ui-sref的简单使用
Apr 24 Javascript
JavaScript获取用户所在城市及地理位置
Apr 21 Javascript
8个有意思的JavaScript面试题
Jul 30 Javascript
js右键菜单效果代码
Jul 21 #Javascript
$()JS小技巧
Jul 21 #Javascript
IE 缓存策略的BUG的解决方法
Jul 21 #Javascript
用JS实现的一个include函数
Jul 21 #Javascript
代码精简的可以实现元素圆角的js函数
Jul 21 #Javascript
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
Jul 21 #Javascript
用javascript实现读取txt文档的脚本
Jul 20 #Javascript
You might like
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
使用PHP数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
php连接mysql数据库代码
2009/03/10 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
php xhprof使用实例详解
2019/04/15 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
简单的Jquery全选功能
2013/11/07 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
python动态网页批量爬取
2016/02/14 Python
Scrapy框架使用的基本知识
2018/10/21 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
Python3 读取Word文件方式
2020/02/13 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
奠基仪式策划方案
2014/05/15 职场文书
拆迁委托协议书
2014/09/15 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
Python自动化实战之接口请求的实现
2022/05/30 Python