一个基于JSON的对象序列化算法
来源:华佗健康网
维普资讯 http://www.cqvip.com 98 2007,43(15) Computer Engineering and Applications计算机工程与应用 一个基于JSoN的对象序列化算法 张 涛 ,黄 强 ,毛磊雅 ,高 兴 ZHANG Tao 一,HUANG Qiang3,MAO Lei-ya ,GAO Xing 1.西南交通大学信息科学与技术学院.成都61003l 2.四川师范大学计算机软件重点实验室,成都610068 3.四川农业大学信息工程与技术学院.四川雅安625014 1.Department of Information Science and Technology,Southwest Jiaotong University,Chengdu 610031,China 2.Computer Software Lab,Sichuan Normal University,Chengdu 610068,China 3.Information&Engineering Technology College,Sichuan Agricultural University,Ya’an,Sichuan 625014,China E—mail:tzhang2000@126.con ZHANG Tao,HUANG Qiang,MAO Lei-ya,et a1.Algorithm of object serialization based on JSON.Computer Engineering and Applications,2007,43(15):98-100. Abstract:Nowadays,XML is mainly applied to data-interchange in current Web application system which is based on Ajax (Asynchronous JavaScript and XML)technology,but as a sturctured document,XML must be manually resolved between the server-side and the client—side,SO that more system resources is consumed,and therefore problems such as weak performance, deifciency of compatibility and lack of sensitivity are caused by using XML.JSON(JavaScript Object Notation)is a lightweight data—interchange format,and it can be easily parsed by browser which supports JavaScript.In this paper,an algorithm of object serialization based on JSON is proposed,by which the JSON grammar is analyzed and the object navigation graph is also established.With this algorithm,the Java objects can be translated into JSON expressions transparently,SO as to the client—side can take full advantage of JavaScript engine to parse JSON expressions,thus the problems resulted from XML can be solved effectively. Key words:Ajax;data-interchange;Java Script Object Notation(JSON);serialization;object navigation graph 摘要:目前基于Ajax技术的Web开发主要采用XML进行数据交换.然而XML是一种结构化的文档,需要服务器和客户端都对 其进行手工解析,将会占用更多的系统资源,因此采用XML进行数据交换会导致性能低下、兼容性不够、灵敏度低的问题。JSON (JavaScript Object Notation)是一种轻量级的数据交换格式,易于被支持JavaScript的浏览器所解析。提出了一种基于JSON的对象 序列化算法,该算法通过分析JSON文法并建立对象导航图,透明地将Java对象序列化成JSON表达式,使客户端能够很好地利用 JavaScript引擎来解析JSON响应,有效地解决了解析XML所造成的缺陷。 关键词:Ajax;数据交换;JSON;序列化;对象导航图 文章编号:1002—8331(2007)15—0098—03 文献标识码:A 中图分类号:TP311.52 l 引言 响应)。然而Ajax的数据交换主要基于XML.由于XML是一种 作为Web 2.0规范的核心组成部分,Ajax技术通过使用 结构文档,需要服务器和客户端都对其进行手工生成和解析, 浏览器端的JavaScript、DHTML和与服务器异步通信机制很好 为系统开发带来了诸多不便,并且JavaScript基于DOM的 地弥补了B/S系统在Web界面上对用户自然和响应灵敏度方 XML解析模型使其效率低下并且需要占用较多的系统资源, 面的不足(使用户从请求,响应的循环中解脱出来。借助于 所以不能很好地融人基于O0的服务系统。JSON是一种轻量 Ajax,可以在用户单击按钮时,使用JavaScript和DHTML立即 级的数据交换格式,易于被支持JavaScript的浏览器所解析,并 更新UI.并向服务器发出异步请求,服务器根据请求完成业务 且易于维护。本文提出了一种基于JSON(JavaScript Object 逻辑。当请求返回时,Ajax会使用JavaScript和CSS动态更新 Notation)的对象序列化算法,该算法通过对象图导航和JSON UI,而不是刷新整个视图。在整个过程中,用户甚至不知道浏览 文法.将服务系统所产生的处理结果对象图(Object Graph)从 器正在与服务器通信.让B,s系统实现和C,s系统一样的即时 服务器序列化到客户端并被浏览器反序列化到其运行环境中. 基金项目:四川师范大学Sphinx交互式化学CAI系统(省部级科学基金)(No.O006O510)。 作者简介:张涛(1981一).男,回族,研究生,主要研究方向:网络与信息系统,软件工程;黄强(1981-),男,讲师,主要研究方向:软件工程,虚拟机, 人工智能,神经网络;毛磊雅(1982一),女,研究生,主要研究方向:计算机网络及SUPANET体系结构;高兴(1981一),女,研究生,主要研 究方向:计算机网络与信息系统。 维普资讯 http://www.cqvip.com 张 涛.黄 强,毛磊雅,等:一个基于JSON的对象序列化算法 使客户端能够使用JavaScript透明地处理服务器端产生的结果 对象,并使用JSON作为桥梁完全消除了XML的产生和解析 , 2007,43(15) JSON序列 化模块 Java虚拟机 堆空间 99 浏览器的 JS反序列化 JavaScript引擎 模块 过程 、、r \对象 —、 \1/ 对象)一、 l //1厂]\ \H \ 【上 2基于JSON的对象序列化算法 2.1 JSON文法简介 JSON是一种轻量级的数据交换格式。易于人阅读和编写, 同时也易于机器解析和生成。它基于JavaScript Programming Language.Standard ECMA-262 3rd Edition—December 1 999的 一象1/ '—一、lf\对 l主象 . q/ JSON数据流 对象p/ ,-【L——— \ r \\~// \' 、~, 多 JSON类型 \~/ 图1 Java对象和JavaScript对象之间的交换结构 表1数据类型映射表 Java类型 个子集。JSON采用完全独立于语言的文本格式,但是也使用 了类似于C语言家族的习惯。南于JSON是JavaScfipt规范的 子集.所以JSON文档能被支持JavaScript的浏览器所解析,这 些特性使JSON成为理想的数据交换语言。JSON所定义的文 法如下所示: object (1,(membe/s} meml ̄ers string:value; members,string:value array [] 【elements】 elements value elements,valne va[He string,number,object, array,title,false,null JSON建构于两种结构: (1)“名称/值”对的集合(A collection of name/value pairs)。 不同的语言中,它被理解为对象(object),纪录(record),结构 (struct),字典(dictionary),哈希表(hash table),有键列表 (keyed list),或者关联数组(associative array)。 (2)值的有序列表(An ordered list of values)。在大部分 语言中,它被理解为数组(array)。 这些都是常见的数据结构。JSON具有以下这些形式: 对象是一个无序的…名称/值’对”集合。一个对象以“{’' (左括号)开始,“1.’(右括号)结束。每个“名称”后跟一个“:”(冒 号);“‘名称,值’对”之间使用“,”(逗号)分隔。 数组是值(value)的有序集合。一个数组以“[”(左中括号) 开始,“1'.(右中括号)结束。值之间使用“,”(逗号)分隔。 值(value)可以是双引号括起来的字符串(stirng)、数值 (number)、true、false、null、对象(object)或者数组(array)。这 些结构可以嵌套。 字符串(string)是由双引号包嗣的任意数量Unicode字符 的集合,使用反斜线转义。一个字符(character)即一个单独的 字符串(character stirng)。 2.2基于JSON的对象序列化算法的设计 Java对象和JavaSeript对象之间的交换结构如图1所示。 建立Java和JSON类型的映射关系如表1所示。 其中Scalar类型为JSON的基础类型.与Scalar对应的 Java对象可以被直接转换为等值的JSON描述字符串,例如 Java的整形5被转换为JSON表达式“5”.而Java的集合 byte.sbO11.int.1ong,lfoat,double,Boolean,String,Date Scalar Collection,Array Array Map Object Bean 0bject (Coilection)和数组(Array)可以转换为等价的JSON数组对象, 而Java的映射(Map)在JSON中会被转换为对象,Map的键作 为对象的属性(Attirbute),而Map的值作为该属性的值;而 JavaBean也会被转换成JSON的对象,和Map不同,JavaBean 和JSON对象的逻辑结构一致,Bean属性和JSON对象的属性 一一对应。 本文的序列化算法将JSON的表达式拆分成两种 JavaScript原语: JS变量定义(JS Var Definition):var a=b; JS变量赋值(JS Var Assignment):n:6: 该算法中.中间变量b为前缀加随机数格式来确保对象唯 一性,例如:一si一24825485,特别的,根对象的表示为一 一root_ 2089889313。 陔算法将Java对象与JSON对象的转换定义为变量定义 (JSD)和变量赋值(JSA)两部分,在对对象图的一个节点进行 解析前会输出一条JSD,在解析完成以后输出一条JSA;针对 该节点的对象属性类型,当处理标量类型时,直接使用标量转 换,标量转换的输出为Scalar字符串(JSS),当处理复合对象 时,采用引用占位符来替换标量转换.输出为引用占位符 (JSR),并且重新进入节点解析过程(根据节点类型采用相应的 序列化方法),整个对象的序列化流程如图2所示。 图2对象序列化流程图 南于Java的对象可能是复合对象引用,并且引用之间可 以存在任意层次的嵌套.所以使得对象图成为一个有向有环 图,故要动态的对象导航图(Navigation Graph),须建立基于类 型的转换状态机M(json)=(Q,S, g,Ⅳ)如图3所示。 其中Q是有限状态集;T是触发事件集合;S是输入序列 集合,作为输入集 是状态转换函数/:Q S一>Q;g为输出集; N∈Q是初态。 定义节点解析前均为Ⅳ态 状态集p:f ,v 中间节点 数组型的节点 c 集合型的节点 M 映射型的节点 维普资讯 http://www.cqvip.com 100 2007,43(15) Computer Engineering and Applications计算机工程-9应用 该状态机模型实现的算法能够导航任意复杂的Java对象 导航图,并生成符合JSON文法的Java对象图所对等的JSON 表达式集合。 2.3基于JSON的对象序列化算法的应用实例 以下面图4中的Java对象为例.该Java对象为一个 JavaBean类型的对象.首先进入状态机的Ⅳ状态.通过状态机 的状态转换函数f(N,object)=D,跳转到D状态,并输出一条 JSA,在该状态下进行内部节点的解析;其次,由于该对象的内 部节点均属于JSON文法中的Scalar类型,故通过厂(P(i), Scalar)=S。进行标量输出;最后当内部节点解析完成时(i=n). 激活触发事件 ,通过厂(D,leo)_,),输出一条JSD,并输出一条 图3转换状态机 O JavaBean型的节点 JSA。至此该JavaBean型节点解析完成。得到的JSON序列如图 5所示。 ipublic static Item gethem(){ Item iteml=new Item(); D 5 变量定义集合 标量输出集合 、 ar_sj_rfrot_208988931 3; varsj一12848256=[nu11]; j i』tem1.setld("0oi”); 『【 i var_sj_261 30918={”+id:”OOl”、 ”name:”CF Card”,price:”¥49”}; I A( )数组的元素, ∈(0,1,2,…,a】 E( ) 映射的入口,i∈(0,1,2,…,n】 P( )JavaBean型的属性, ∈(0,1,2,…,//,】 j 触发事件集=f Fo Fm Fa } item1.setName(”CF Card );} i;tend setPrice(”¥49”); 【 f— 一12848256[0]=_sj 261 30918; ; ! rfe[urn itemli f} 图4 Java对象示例图 j—sj—root一208988931 3--一sj一12848256; i 【一 一m(n一208988931 3; 图5 JSON响应序列 JavaBean型 点解析完成事件 映射型 点解析完成事件 数组型节点解析完成事件 客户端通过JavaScript引擎中的eval()函数反序列化图5 中的JSON响应序列,使之运行在客户的浏览器上。 3 JSON与XML的比较 JSON比较简单.易于读写,格式都是压缩的,占用带宽小。 输入数组型节点 输入集合型节点 输入映射型节点 输入JavaBean型节点 节点中内部对象的属性为Scalar类型 输入集:f Array 采用JSON作为数据交换格式.客户端只需利用JavaScript中 Collection Map 的eval()函数进行解析(而且仅仅需要一行代码),显然要比基 于DOM的XML解析模型更简单.而且速度更快。表2为JSON 与XML之间的比较。 表2 JSON与XML之间的比较 数据格式占用带宽代码开发量兼容性解析速度开发效率灵敏度 Object Scalar Node 节点中内部对象的属性为非Scalar类型(复合类型) 输出集=f JSD JSR JSA JSS 变量定义 引用占位符 变量赋值 标量输出 4 总结 本文提出了一种基于JSON的对象序列化算法,该算法通 过分析JSON文法并建立对象导航图,透明地将Java对象序列 化成JSON对象,使客户端利用JavaScript引擎来解析JSON响 应.有效解决了解析XML所造成的缺陷。 状态转换函数: _厂(N,Object)=O N,Array)-A N,Collection):C以N,Map)=M, 厂(C, ) 以A(i),Scalr):S,a f(E( ),Scalar)=5 (P(i),Scalr):5 (aA(i),Node):/、f (E(i), Node):/、f 厂(P(i),Node):/、f, (收稿日期:2006年l0月) 参考文献: 【1]Garrett J J.ajax:a new approach to web applications IEB/OL].(2005). http://www.adaptivepath.comlpublications/essays/archives/O00385.php. f(A,Fa)=D M,Fm)=D 0,Fo)=D 输出函数: g(A,Scalar)=JSS,g(M,Scalar)=JSS,g(O,Scalr)=JSS,ag(A,Node) =【2]Smith K.Simplifying Ajax—style Web development[J].Computer, 2006,39(5):98—101. JSR,g(M,Node)=JSR,g(O,Node)=JSR 【3】Paulson L D.Building rich web applications with Ajax[J].Comput・ el",2005,38(10):14—17. g(A,Fa)=JSD,g(M,Fm)=JSD,g(O,Fo)=JSD,g(N,Object)=JSA, g(N,Array)=JSA,g(N,Map)=JSA [4】Sayar A,Pierce M,Fox G.Integrating AJAx approach into GIS vi— sualization web services[C]//Telecommunications,AICT—ICIW’06: International Conference on Internet and Web Applications and 注: 0一表示对节点的内部对象进行循环解析 i:n表示某节点的所有内部对象都已经解析完成 (下转l33页) 维普资讯 http://www.cqvip.com 高承实,王建政,张 栋:基于蚁群算法的信任路径寻找算法 ∞n1日 O O O 2007,43(15) 133 己 0∞皇皇0 ∞ O O O O 假设其中只有c 为有欺诈行为的节点,c,对c 的推荐信任值 很低.那么这条路径推荐信任值Pathvalue=O.031,这条路径很 可能被淘汰。假如c 与c 进行联合欺诈,令r' ̄i-0.95,那么, Path due=0.136.淘汰的概率仍然很大,其实可以看出节点c2 对节点c 的推荐信任值很重要,只要节点c:对节点c,做出正 确的评估,即做出很低的评价,那么这条信任路径的推荐信任 值就会很低。因此,只要良好的节点能够做出正确的评估,那么 就能选出较优的有价值的信任路径。 o 5 lo l5 20 25 30 35 Number of circle 图1 循环次数与推荐信任值的关系 5 结束语 本文提出了一种新的基于蚁群算法的寻找信任路径的算 法.不同于传统推荐信任模型中单纯采用平均得到推荐信任值 的方法.而是通过多次循环选出多条较优的独立信任路径,在 一定程度上可有效防止联合欺诈行为,并通过实验证明了它的 有效性,在性能和可靠性上也优于其它算法,适应现实的复杂 网络环境动态变化。本文进一步的研究工作包括仿真更复杂的 网络模型,调整好参数,提高算法实用性与性能,以及改进算 法,提高本文算法的性能。(收稿日期:2006年9月) length 图2 length值与运行时间的关系 参考文献: 【1】Beth T,Borcherding M,Klein B.Valuation of trust in open net- works[C]//Proceedings of the European Symposium on Research in Security(ESoRICS).Brighton:Springer-Verlag,1999:59—63. 【2J Abdul-Rahman A,Halles S,A distributed tustr model[C]//Proceed— 0 - ings of the 1997 New Security Paradigms Workshop.Cumbria,UK: ACM Press,1998:48—60. 皇 j 【3】J ̄ang A.A model for trust in security systems[C]//Proceedings of the 2nd Nordic Workshop on Secure Computer Systems,1997. 【4】Mui L,Mohtashemi M,Halberstadt M.A computational model of trust and reputation【C]//Proceedings of the 35th Hawaii Inter- length national Conferrence on System Sciences,2002. 图3 length值与找到的推荐信任路径的数量关系 【5】5 Yahalom R,Klein B,Beth Th.Trust relationships in secure systems —对最终结果不可避免地造成影响.但择优选径就会大大消除这 种影响。欺诈无非是颠倒黑白,把好的节点说成“坏的”,把坏的 a distirbuted authentication perspective[C]//Proc 1993 IEEE Symp on Research in Security and Privacy,1993:150—164. 节点说成“好的”。用本文的算法进行评估时,存在欺诈行为的 节点的信任路径就很可能被淘汰,只选择由无欺诈行为的节点 组成的信任路径。 例如针对路径 S—+C l_+C2----}c3---+C4---+t, 【6】Yahalom R,Klein B,Beth Th.Trust—based navigation in distirbuted systems.Special Issue“Security and Integrity of Open Systems”of the Journal“Computing Systems”.1994. 【7】Reiter M K,Stubblebine S G.Resilient authentication using path independence[ ̄.IEEE Transactions on Computem,1998,47(12). [8J白保存,李中学,陈旺.PKI信任度模型路径算法研究【J1.计算机工程 :.=0.85, I_0.92, c,z=0.25, :=0.22,n c‘=0.73 与应用,2005,41(21):182—185. (上接100页) Services/Advanced International Conference on 19-25 Feb,2006:169 【9】Crane D,Pascarello E,James D.Ajax in action.Manning,2005. 【l0】Ajax using JSON【EB/OL].(2006).http://www.x2blog.cn/lulei/3851. htm1. 【5】Intoducing JSON[rEB/OL].(2005).http://www.json.org. 【6】Ajax patterns[EB/OL].(2005).http://www.soflwareas.corn/ajax-patterns. 【7】JSON RPC[EB/OE1.(2006).http://oss.metaparadim.gcom/jsonrpc/. 【8】McLaughlin B.Mastering Aj part 1:introduction to Ajax.IBM De— veloperWorks,2005. 【l1】阎宏.Java与模式【M】.北京:电子工业出版社,2003:179—200,993— 1004,621-656. 【l2】左孝凌,李为鉴,刘永才.离散数学【M】.上海:上海科学技术文献出 版社,1981:57—147.
因篇幅问题不能全部显示,请点此查看更多更全内容