快速注册 登录
文理人 返回首页

拉莫斯的小包间 https://www.wenliren.com/?7782 [收藏] [复制] [分享] [RSS] 请用心听 不要说话

日志

JSON数据交换语言在Mashup Web服务下的应用

已有 1159 次阅读2011-7-17 13:30

    摘要:JSON(JavaScript Object Notation)是一种轻量级的数据交换语言。它基于ECMA262语言规范(1999-12第三版)中JavaScript编程语言的一个子集。本文介绍了一个将JSON数据交换语言应用于地震信息在Google Maps上标注的Mashup web服务的实验。本实验表明:对于基于Web2.0的地学信息服务来说,JSON确实是一种较灵活的技术方案。   

    关键词:JSON; Mashup; Google Maps;地震   

    中图分类号:P23 文献标识码:A 文章编号:1674-3695-(2009) 05-24-05   

    1引言   

    XML拥有跨平台、跨语言的优势,但是,XML的解析比较复杂。无论是服务器端生成或处理XML,还是客户端用JavaScript解析XML,都常常导致复杂的代码,较低的开发效率。实际上,对于大多数Web应用来说,并不需要复杂的XML来传输数据。这就为JSON的Web应用提供了舞台。对那些应用Ajax的Web2.0网站来说,JSON确实是目前最灵活的轻量级方案。例如目前比较流行的Mashup Web服务。   

    本文介绍了一个实验,将中国地震台网中心公开提供的地震数据编写为JSON格式,结合Google Ajax API加载器,将地震发生地的经纬度坐标数据,标注在Google Map二维地图上,并附加显示出地震的发生时间,震级,当地新闻等信息,给用户以直观的体验。   

    本实验表明,JSON在基于Web2.0的服务中,充分体现了其易于编码、易于解析、传输高效的特点,提高了Web2.O的部署效率,在地学信息服务领域有较大的应用前景。   

    2JSON概述   

    与XML一样,JSON也是一种基于纯文本的数据格式。JSON的数据格式非常简单,可以用JSON传输一个简单的String,Number,Boolean,也可以传输一个数组,或者一个复杂的Object对象。   

    通过将JSON与XML的特性相比较(如下),可以发现JSON简化数据编码与访问,从而提高了数据传输效率的优点。   

    (l)可读性,JSON和XML的可读性不相上下,JSON是建议的语法,XML是规范的标签形式;   

    (2)可扩展性,XML有很好的扩展性,JSON也具有相同的特性;   

    (3)编码难度,XML的发展和应用的时间较久,形成了丰富的编码工具,这点JSON比较欠缺。但是JSON的编码本身比较容易,即使不借助工具也能写出JSON的代码;   

    (4)解码难度,XML的解析得考虑子节点父节点,而JSON的解析难度几乎为0;   

    (5)命名空间,XML允许不同上下文中的相同的信息段彼此混合,然而,在JSON中已经找不到了命名空间;   

    (6)数据验证,XML的语法及其内容属性,可以通过配套的DTD文件或者XSD文件来验证,JSON显然还缺少一定的规范约束。   

    3Mashup相关技术   

    3.1Mashup概述   

    Mashup是将多个不同的支持Web API的应用进行堆叠而形成的新型Web服务。它利用了从多个外部数据源检索到的内容来创建全新的、综合的服务,将来自不止一个数据源的内容进行组合,创造出更加增值的、更加满足用户需求的服务。Mashup所能利用的外部数据源格式多种多样,表现出惊人的兼容性,它涵盖public APIs, XML/RSS/Atom feeds, Web services, HTML等。充分体现了Web2.0时代,协作和共享的思想精髓。   

    3.2 Mashup的应用类型   

    Mashup主要分为下面四种类型。   

    (l)地图Mashup   

    目前,人们搜集的大量有关事物和行为的数据,大部分具有位置注释信息。所有这些包含位置信息的数据集,可以利用地图,通过图形化方式呈现出来。自从Google公开了自己的Google Maps API,让Web开发人员可以方便的在地图中随意标注所有类型的数据。这种直观简洁的体验,极大的促进的Mashup的发展。而本文所应用的Mashup服务就属于地图应用类型。   

    (2)视频和图像Mashup   

    Mashup的设计者可以将这些视频和图像的内容和其他与内容相关的信息(例如谁拍的照片,照片的内容是什么,在何时何地拍摄的等等)放到一起。   

    (3)搜索和购物Mashup   

    开发设计人员使用B2B技术或屏幕抓取的方式来收集、比较多个数据源公布的价格数据,方便用户进行选择,进而指导人们消费。   

    (4)新闻Mashup   

    新闻Mashup可以根据一名用户的定制,将多个新闻源的新闻提要聚集起来。并将其通过Web呈现出来,创建个性化的报纸,从而满足读者独特的兴趣。   
    3.3 Mashup应用架构   
    Mashup应用从架构上是由三个不同的部分组成的,它们在逻辑上和物理上都是相互脱离的(可能由网络和组织边界分隔):服务提供者(包括API接口和数据源)、Mashup站点和客户机的Web浏览器。如图1所示。 

     (1)API接口或者数据源。它们一般是彼此独立的内容或者接口的提供者。为了方便数据的检索,提供者通常会将自己的内容通过Web协议对外提供。然而,也有很多有价值的潜在数据源并没 
有方便地对外提供API。但是,开发者也可以通过屏幕抓取的技术来实现数据获取。   

    (2)Mashup站点。即Mashup逻辑所在的地方,而并不一定是执行这些逻辑的地方。Mashup可以根据需求,聚积多个服务器提供的动态内容,通过传统的Web应用程序发布服务。   

    (3)客户机的Web浏览器。这是以图形化的方式呈现应用程序的地方,也是用户交互发生的地方。Mashup通常都使用客户机端的逻辑来构建合成内容。   

    4 Mashup的实现   

    4.1系统体系结构   

    本文实现的Mashup服务通过Google Map标注出1999年至2008年,发生在中国以及和中国相邻地区的震级大于等于7级的事发点,显示当地地震发生的时间、震级等相关信息。系统的数据来源分两部分,地震数据和地图数据。地震数据是根据中国地震台网中心网站(http://www.csndmc.ac.cn/newweb/data.htm,日期1999-l-l至2008-12-31,东经135度至东经73度,北纬3度至北纬53度,深度O至800,震级7至10)提供的在线数据信息,编写为JSON数据格式。地图数据来自Google Map API服务。   

    系统的架构如下图2所示,来自客户机浏览器的请求转向Mashup站点所在的服务器。请求的页面包括HTML和JavaScript。JavaScript调用地震数据和Google Map API加载的地图数据服务后,按照地震发生地的经纬度坐标进行内容组合。

   

    4.2关键技术实现   

    系统关键技术主要包括三个部分,利用Google Ajax API加载器加载Google Map,创建JSON格式的地震数据文件,以及读取地震服务数据文件。   

    (1)利用Google Ajax API加载器加载Google Map   

     对Google地图API中当前使用的所有类、方法和属性使用google.maps.*名称控件,使用此名称空间替换G前缀。使用google.setOnLoadCallback()对对象执行初始化。例如,当使用Google Ajax API加载器时,GMap2对象映射到google.maps.Map2。   
     <script type="tex/javascript">  

     function load(){  

      if(GBrowserIsCompatible()){  

       var map=new GMap2(document.getElement-Byld("google_map_div"));  

       map.addControl(new GSmallMapControl());  

       map.addControl(new GScaleControl());  

      map.setCenter(new GLatLng(36.5,108),3); 
       }  

     }         

    (2)创建JSON格式的地震数据文件   

    本实验所应用的JSON数据结构是Object对象。Object对象在JSON中是用{}包含一系列无序的Key-Value键值对表示的,Key-Value之间使用“:”(冒号)分隔,Key-Value键值对之间使用“,"(逗号)分隔。   

    数组是值(value)的有序集合。一个数组以“【”(左中括号)开始,“】”(右中括号)结束。值之间使用“,"(逗号)分隔。此处的Object相当于Java中的Map,而不是Java的Class。另外,Key只能用String表示。其中Value也可以是另一个Object或者数组,因此,复杂的Object可以嵌套表示。   

    本实验中,一个locations对象包含多个location对象,而location又包含了id、city、date等对象,具体表,如下:   
   {"locations":   
   {"location":[   
        {"id":"四川汶川县",   
        "city":"四川汶川县",   
        "date":"2008-05-12",   
        "time":"14:28:04.0",   
        "level":"Ms8.O",   
        "address":"31.0,103.4",   
        "information":"地震已致65080人遇难   
360058人受伤23150人失踪(数据更新中)"   
         },……   
         ]   
         }   
         }   

    将上面的JSON数据结构使用XML改写,如下: 

<locations>

 <location>         
  <id> 四川汶川县</id>

  <city> 四川汶川县</city>

  <date>2008-05-12 </date>

  <time>14:28:04.0</time> 

  <level>Ms8.O </level>

  <address>31.0,103.4</address>

  <information>地震已致65080人遇难360058人受伤23150人失踪(数据更新中)</information>  

 </location>

…… 

</locations>       

    目前,主流技术都提供了对json数据的解析以及与其它相关数据格式的方便转化。java提供了JSON-lib开发包可以用于把bean,map和XML转换成JSON,并能够把JSON转回成bean和DynaBean。而微软的AJAX也提供了对JSON的支持,使用的是Sys-tem.Runtime.Serialization.Json的内容。   

    (3)读取JSON地震数据文件   

    要在地图上把地震信息标注出来,需要在JavaScript脚本中解析出JSON数据文件中的地震信息,包括地震发生的时间、城市、经度、纬度以及震级等。   

     // read file   

     receiveReq.open("post",’earth∵.data’,true);   

       ……   

   // initialization   

      var response=eval(" ("+receiveReq.responseText+")");   

       ……   

    // get city,id,date,time,and level information about earth∵   

   for(vari=0;i   var city=response.locations.location[i].city;   

       ……   

   var id=response.locations.location[i].id;   

   var information=response.locations.location[i].information;   

   var addr=response.locations.location[i].address;   

       ……   

    4.3服务应用界面   

    用户需要打开浏览器,访问网络上的本Mashup站点,尽管地震数据是以JSON的格式保存在Mashup站点,但是Google Maps需要API进行在线数据调用。用户可以对地图进行简单的放大,缩小,拖拽的操作。   

    初始的地图界面会直接定位在中国以及和中国相邻地区,用户点击右边的数据列表,地图上会在正确的经纬度坐标上进行标注。并同时显示当地地震发生的   
时间、震级等相关信息,操作如图4-2所示。 

    5结束语      

    JSON以其轻巧的传输,简单的编码、解析等优势,在Ajax,Mashup等web2.0应用上都体现了它的价值。JSON已经是JavaScript标准的一部分。目前,主流的浏览器对JSON支持都非常完善。掌握JSON数据交换语言,无疑会在我们进行Web开发时,多一种轻量级的数据解决方案。本文只介绍了JSON在数据编码和解析的应用,进一步的网络传输性能,数据验证,Ajax应用等特性,值得我们进行进一步的研究。  

参考文献:  

[1] JSON在Wikipedia(维基百科)中的定义http:// zh.wikipedia.org/w/index,php? 
    title=JSON&variant=zh-cn  

[2]Mashup(Web application hybrid).http://en.wikipedia.org/wiki/   
   Mashup_(Web application hybrid)  

[3]Google Maps一种由Google提供的基于网络的地图服务和技术   
   http://en.wikipedia.org/wiki/Google_Map  

[4]XML可扩展标记语言http://www.w3.org/XML/  

[5]中国地震台网中心地震数据管理和服.http://www.csndmc.ac.cn/  

[6]JSON一lib下载地址:http://json-lib.sourceforge.net/ [7]system.Runtime,Serialization命名空间包含  
一些类,这些类可用于将对象序列化为JavaScript对象表示法(JS0N),并可用于从JSON反序列化对象。  

[8]使用Coogle AJAX API加载器.http://code.google.com/intl/zh-   
   CN/APIs/maps/documentation/index.html  

[9] Web2.0 http://en.wikipedia.org/wiki/Web_2.0  

[10]JSON官方网站 http://www.json.org  

[11]Programmable Web. http://www. ProgrammableWeb.corn/  

[12]IBM DeveloperWorks中国网站 http://www.ibm.com/developer- works/cn/ 

 已同步至 拉莫斯的微博

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 快速注册

返回顶部