热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JSON与XML相比优势在哪?

虽然XML已在不少应用程序中大显身手,但它并不是十全十美的,特别是遇到AJAX应

虽然XML已在不少应用程序中大显身手,但它并不是十全十美的,特别是遇到AJAX应用的时候,XMLHttpRequest会检查返回数据的MIME类型,如果是text/xml类型,XMLHttpRequest就会运行XML Parser来解析返回的文档,并在内存中构建出对应的DOM树,之后,你可以用Javascript标准的DOM方法来操作DOM树。由于众所周知DOM的诟病,这显然不是有效率的方法。另外一个问题是,如果你想使用Javascript对象而不是直接用XML数据的话,你还得自己遍历整个DOM树来创建相应对象。

于是JSON出现在我们面前。

JSON提供了一种更适合AJAX应用的标准数据交换格式。JSON(Javascript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。

XML和JSON都利用结构化来标记数据。我们将通过一个地址簿的例子来展示它们之间的不同。

该地址簿用XML如下表示:

  
  
   Sean Kelly  
   SK Consulting  
     
      
kelly@seankelly.biz
kelly@seankelly.tv
+1 214 555 1212 +1 214 555 1213 +1 214 555 1214
1234 Main St Springfield, TX 78080-1216
5678 Main St Springfield, TX 78080-1316
http://seankelly.biz/
http://seankelly.tv/

在JSON中,则是:

{   
   "fullname": "Sean Kelly",   
   "org": "SK Consulting",   
   "emailaddrs": [   
      {"type": "work", "value": "kelly@seankelly.biz"},   
      {"type": "home", "pref": 1, "value": "kelly@seankelly.tv"}   
   ],   
    "telephones": [   
      {"type": "work", "pref": 1, "value": "+1 214 555 1212"},   
      {"type": "fax", "value": "+1 214 555 1213"},   
      {"type": "mobile", "value": "+1 214 555 1214"}   
   ],   
   "addresses": [   
      {"type": "work", "format": "us",   
       "value": "1234 Main StnSpringfield, TX 78080-1216"},   
      {"type": "home", "format": "us",   
       "value": "5678 Main StnSpringfield, TX 78080-1316"}   
   ],   
    "urls": [   
      {"type": "work", "value": "http://seankelly.biz/"},   
      {"type": "home", "value": "http://seankelly.tv/"}   
   ]   
}  

JSON提供了两种结构:

  1. 名/值对,其格式如下 {"名":"值", ...} 如:{"fullname": "Sean Kelly"},你可以把它理解为对象,或者哈希表,字典等等。
  2. 数组,它是值的有序列表。一个数组以“[”开始,“]”结束。值之间使用“,”分隔。

JSON的值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

在AJAX中的XML与JSON之战

在AJAX应用中,你可以用XMLHttpRequest读取XML或者JSON文件。一个典型的AJAX调用如下:

var req = new XMLHttpRequest();   
req.open("GET", "http://localhost/addr?cardID=32", /*async*/true);   
req.Onreadystatechange= myHandler;   
req.send(/*no params*/null);     

Web服务器应答的时候,处理子程序(例子中的myHandler)会反复被调用。

处理地址簿的一个XML的程序片断可能是:

function myHandler() {   
   if (req.readyState == 4 /*complete*/) {   
       // Update address field in a form with first street address   
       var addrField   = document.getElementById('addr');   
       var root        = req.responseXML;   
       var addrsElem   = root.getElementsByTagName('addresses')[0];   
       var firstAddr   = addrsElem.getElementsByTagName('address')[0];   
       var addrText    = fistAddr.firstChild;   
       var addrValue   = addrText.nodeValue;   
       addrField.value = addrValue;   
   }   
}        

注意:XMLHttpRequest自动创建了DOM树,你可以通过responseXML属性访问树并进行一系列处理,比如通过getElementsByTagName访问元素。但对于复杂的XML,这是个烦琐无味的活儿!

再看JSON:

function myHandler() {   
   if (req.readyState == 4 /*complete*/) {   
       var addrField = document.getElementById('addr');   
       var card = eval('(' + req.responseText + ')');   
       addrField.value = card.addresses[0].value;   
   }   
}     

使用JSON的第一件事,你要手工解析JSON响应,但是请记住,JSON是Javascript的子集,事实上你只需要调用一行 eval就可以完成解析工作。接下来访问JSON的对象就和访问任何Javascript对象完全一样:

card.addresses[0].value  即"1234 Main Stb &"    
card.addresses[0].type   即"work"    
card.addresses[1]        即home address;   
card.fullname            即 "Sean Kelly"    

上千次的测试之后表明,JSON的速度几乎是XML解析的10倍!

JSON要普及,这里有两个问题:

  1. 有多少服务器愿意提供JSON格式的输出?随着JSON的速度优势得到大家的认可,相信会越来越多。
  2. 执行eval操作可能会导致安全漏洞。所以最好还是使用一个JSON解析器,不过幸运的是。你可以在http://www.json.org找到一个。未来JSON的支持可能会被包括在ECMAScript标准中。

本文地址:http://www.nowamagic.net/librarys/veda/detail/1209,欢迎访问原出处。


推荐阅读
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • Django框架进阶教程:掌握Ajax请求的基础知识与应用技巧
    本教程深入探讨了Django框架中Ajax请求的核心概念与实用技巧,帮助开发者掌握异步数据交互的方法,提升Web应用的响应速度和用户体验。通过实例解析,详细介绍了如何在Django项目中高效实现Ajax请求,涵盖从基础配置到复杂场景的应用。 ... [详细]
  • 在处理大文件上传时,服务端为何无法直接接收?这主要与 PHP 配置文件 `php.ini` 中的几个关键参数有关,如 `upload_max_filesize` 和 `post_max_size`。这些参数分别限制了单个文件的最大上传大小和整个 POST 请求的数据量。为了实现大文件的高效上传,可以通过文件分割与分片上传的方法来解决。本文将详细介绍这一实现方法,并提供相应的代码示例,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文探讨了如何在 Google Sheets 中通过自定义函数实现 AJAX 调用。具体介绍了编写脚本的方法,以便在电子表格中发起 AJAX 请求,从而实现数据的动态获取与更新。这种方法不仅简化了数据处理流程,还提高了工作效率。 ... [详细]
  • 可转债数据智能抓取与分析平台优化
    本项目旨在优化可转债数据的智能抓取与分析平台。通过爬取集思录上的可转债信息(排除已发布赎回的债券),并结合安道全教授提出的三条安全线投资策略,新增了建仓线、加仓线和重仓线,以提供更精准的投资建议。 ... [详细]
  • Jedis接口分类详解与应用指南
    本文详细解析了Jedis接口的分类及其应用指南,重点介绍了字符串数据类型(String)的接口功能。作为Redis中最基本的数据存储形式,字符串类型支持多种操作,如设置、获取和更新键值对等,适用于广泛的应用场景。 ... [详细]
  • 探索JavaScript倒计时功能的三种高效实现方法及代码示例 ... [详细]
  • 在Laravel中实现PHP对JSON数据的发布与处理 ... [详细]
  • Select2.js下拉框应用总结与实践要点
    在使用Select2.js下拉框插件的过程中,积累了诸多实践经验与心得。尽管最初觉得Select2在某些方面不尽如人意,但在对比了其他选项后,发现其仍是最优选择。本文将详细探讨Select2.js的配置、优化技巧及常见问题解决方法,帮助开发者更好地利用这一强大的前端工具。 ... [详细]
  • Ajax技术主要应用于JavaScript中,对于ASP的要求相对较低,ASP仅需在后台处理和操作服务器端数据。具体实现过程可以分为以下几个步骤:1. 设计前端表单;2. 使用JavaScript编写Ajax请求,将表单数据发送到服务器;3. 服务器端通过ASP处理请求并返回验证结果;4. 前端根据返回的结果进行相应的用户反馈。这种技术不仅提升了用户体验,还提高了表单验证的效率和安全性。 ... [详细]
  • 前面简单总结了js的基本语法,其实js语法和java、C语言语法有很多的相同之处;接下来将总结js在WEB浏览器中的运用,这部门将要了解的 ... [详细]
  • 利用Java开发百度图片爬虫,实现高效下载功能
    为了满足大量图像素材的需求以支持机器学习项目,本文介绍了一种基于Java语言开发的百度图片爬虫工具,该工具能够高效地抓取并下载百度图片中的资源。文章首先展示了爬虫运行的效果图,并详细阐述了其工作原理和技术实现路径,重点解析了如何通过分析百度图片的网页结构来实现精准抓取。此外,还讨论了在实际应用中可能遇到的问题及解决方案。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
author-avatar
@Cobub
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有