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 相关文章推荐
JavaScript利用正则表达式去除日期中的-
Jun 09 Javascript
Angular中的Promise对象($q介绍)
Mar 03 Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 Javascript
javascript定义类和类的实现实例详解
Dec 01 Javascript
基于JavaScript实现移除(删除)数组中指定元素
Jan 04 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
javascript实现文字无缝滚动效果
Aug 26 Javascript
Vue中computed、methods与watch的区别总结
Apr 10 Javascript
Vue2.0实现简单分页及跳转效果
Jul 29 Javascript
浅谈Vue.set实际上是什么
Oct 17 Javascript
vue实现计算器功能
Feb 22 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
Aug 03 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
Yii操作数据库的3种方法
2014/03/11 PHP
PHP5.3新特性小结
2016/02/14 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
php读取本地json文件的实例
2018/03/07 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
Ext面向对象开发实践(续)
2008/11/18 Javascript
jquery遍历input取得input的name
2009/04/27 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
Python文件和目录操作详解
2015/02/08 Python
详解Python发送邮件实例
2016/01/10 Python
python select.select模块通信全过程解析
2017/09/20 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
Python笔试面试题小结
2019/09/07 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
二年级数学教学反思
2014/01/21 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
假期安全教育广播稿
2014/10/04 职场文书
公司新员工欢迎词
2015/09/30 职场文书