JSON

JSON 入门指南.pdf

字号+ 作者:H5之家 来源:H5之家 2017-04-14 17:04 我要评论( )

JSON 入门指南.pdf,JSON 入门指南.pdf免费下载:登录(或注册)中文技术主题软件下载社区技术讲座廖雪峰,撰稿人简介:JSON即JavaScriptObjectNatation它是一种轻量

登录(或注册)中文技术主题软件下载社区技术讲座廖雪峰,撰稿人简介:JSON即JavaScriptObjectNatation它是一种轻量级的数据交换格式非常适合于服务器与JavaScript的交互。本文将快速讲解JSON格式并通过代码示例演示如何分别在客户端和服务器端进行JSON格式数据的处理。发布日期:年月日级别:初级访问情况:次浏览评论:(查看|添加评论登录)平均分(个评分)为本文评分尽管有许多宣传关于XML如何拥有跨平台跨语言的优势然而除非应用于WebServices否则在普通的Web应用中开发者经常为XML的解析伤透了脑筋无论是服务器端生成或处理XML还是客户端用JavaScript解析XML都常常导致复杂的代码极低的开发效率。实际上对于大多数Web应用来说他们根本不需要复杂的XML来传输数据XML的扩展性很少具有优势许多AJAX应用甚至直接返回HTML片段来构建动态Web页面。和返回XML并解析它相比返回HTML片段大大降低了系统的复杂性但同时缺少了一定的灵活性。现在JSON为Web应用开发者提供了另一种数据交换格式。让我们来看看JSON到底是什么同XML或HTML片段相比JSON提供了更好的简单性和灵活性。Ajax资源中心请访问Ajax资源中心这是有关Ajax编程模型信息的一站式中心包括很多文档、教程、论坛、blog、wiki和新闻。任何Ajax的新信息都能在这里找到。JSON数据格式解析和XML一样JSON也是基于纯文本的数据格式。由于JSON天生是为JavaScript准备的因此JSON的数据格式非常简单您可以用JSON传输一个简单的StringNumberBoolean也可以传输一个数组或者一个复杂的Object对象。StringNumber和Boolean用JSON表示非常简单。例如用JSON表示一个简单的String“abc”其格式为:"abc"除了字符"和一些控制符(bfnrt)需要编码外其他Unicode字符可以直接输出。下图是一个String的完整表示结构:图String的完整表示结构JSON入门指南https:wwwibmcomdeveloperworkscnwebwalojson第页共页:wangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlight一个Number可以根据整型或浮点数表示如下:图Number的表示结构这与绝大多数编程语言的表示方法一致例如:(整数)e(浮点数)Boolean类型表示为true或false。此外JavaScript中的被表示为注意true、false和都没有双引号否则将被视为一个String。JSON还可以表示一个数组对象使用包含所有元素每个元素用逗号分隔元素可以是任意的Value例如以下数组包含了一个StringNumberBoolean和一个:"abc",,false,Object对象在JSON中是用{}包含一系列无序的KeyValue键值对表示的实际上此处的Object相当于Java中的Map<String,Object>而不是Java的Class。注意Key只能用String表示。例如一个Address对象包含如下KeyValue:city:Beijingstreet:ChaoyangRoadpostcode:(整数)用JSON表示如下:JSON入门指南https:wwwibmcomdeveloperworkscnwebwalojson第页共页:wangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlight{"city":"Beijing","street":"ChaoyangRoad","postcode":}其中Value也可以是另一个Object或者数组因此复杂的Object可以嵌套表示例如一个Person对象包含name和address对象可以表示如下:{"name":"Michael","address":{"city":"Beijing","street":"ChaoyangRoad","postcode":}}JavaScript处理JSON数据上面介绍了如何用JSON表示数据接下来我们还要解决如何在服务器端生成JSON格式的数据以便发送到客户端以及客户端如何使用JavaScript处理JSON格式的数据。我们先讨论如何在Web页面中用JavaScript处理JSON数据。我们通过一个简单的JavaScript方法就能看到客户端如何将JSON数据表示给用户:functionhandleJson(){varj={"name":"Michael","address":{"city":"Beijing","street":"ChaoyangRoad","postcode":}}documentwrite(jname)documentwrite(jaddresscity)}假定服务器返回的JSON数据是上文的:{"name":"Michael","address":{"city":"Beijing","street":"ChaoyangRoad","postcode":}}只需将其赋值给一个JavaScript变量就可以立刻使用该变量并更新页面中的信息了相比XML需要从DOM中读取各种节点而言JSON的使用非常容易。我们需要做的仅仅是发送一个Ajax请求然后将服务器返回的JSON数据赋值给一个变量即可。有许多Ajax框架早已包含了处理JSON数据的能力例如Prototype(一个流行的JavaScript库:http:prototypejsorg)提供了evalJSON()方法能直接将服务器返回的JSON文本变成一个JavaScript变量:newAjaxRequest("http:url",{method:"get",onSuccess:function(transport){varjson=transportresponseTextevalJSON()TODO:documentwrite(jsonxxx)}})服务器端输出JSON格式数据下面我们讨论如何在服务器端输出JSON格式的数据。以Java为例我们将演示将一个Java对象编码为JSON格式的文本。将String对象编码为JSON格式时只需处理好特殊字符即可。另外必须用(")而非(')表示字符串:staticStringstringJson(Strings){StringBuildersb=newStringBuilder(slength())sbappend('"')for(inti=i<slength()i){charc=scharAt(i)switch(c){case'"':sbappend(""")breakJSON入门指南https:wwwibmcomdeveloperworkscnwebwalojson第页共页:wangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightcase'':sbappend("")breakcase'':sbappend("")breakcase'b':sbappend("b")breakcase'f':sbappend("f")breakcase'n':sbappend("n")breakcase'r':sbappend("r")breakcase't':sbappend("t")breakdefault:sbappend(c)}}sbappend('"')returnsbtoString()}将Number表示为JSON就容易得多利用Java的多态我们可以处理IntegerLongFloat等多种Number格式:staticStringnumberJson(Numbernumber){returnnumbertoString()}Boolean类型也可以直接通过toString()方法得到JSON的表示:staticStringbooleanJson(Booleanbool){returnbooltoString()}要将数组编码为JSON格式可以通过循环将每一个元素编码出来:staticStringarrayJson(Objectarray){if(arraylength==)return""StringBuildersb=newStringBuilder(arraylength<<)sbappend('')for(Objecto:array){sbappend(toJson(o))sbappend(',')}将最后添加的','变为'':sbsetCharAt(sblength(),'')returnsbtoString()}JSON入门指南https:wwwibmcomdeveloperworkscnwebwalojson第页共页:wangyabinHighlightwangyabinHighlight最后我们需要将Map<String,Object>编码为JSON格式因为JavaScript的Object实际上对应的是Java的Map<String,Object>。该方法如下:staticStringmapJson(Map<String,Object>map){if(mapisEmpty())return"{}"StringBuildersb=newStringBuilder(mapsize()<<)sbappend('{')Set<String>keys=mapkeySet()for(Stringkey:keys){Objectvalue=mapget(key)sbappend('"')sbappend(key)sbappend('"')sbappend(':')sbappend(toJson(value))sbappend(',')}将最后的','变为'}':sbsetCharAt(sblength(),'}')returnsbtoString()}为了统一处理任意的Java对象我们编写一个入口方法toJson(Object)能够将任意的Java对象编码为JSON格式:publicstaticStringtoJson(Objecto){if(o==)return""if(oinstanceofString)returnstringJson((String)o)if(oinstanceofBoolean)returnbooleanJson((Boolean)o)if(oinstanceofNumber)returnnumberJson((Number)o)if(oinstanceofMap)returnmapJson((Map<String,Object>)o)if(oinstanceofObject)returnarrayJson((Object)o)thrownewRuntimeException("Unsupportedtype:"ogetClass()getName())}我们并未对Java对象作严格的检查。不被支持的对象(例如List)将直接抛出RuntimeException。此外为了保证输出的JSON是有效的Map<String,Object>对象的Key也不能包含特殊字符。细心的读者可能还会发现循环引用的对象会引发无限递归例如精心构造一个循环引用的Map就可以检测到StackOverflowException:Test(expected=StackOverflowErrorclass)publicvoidtestRecurrsiveMapJson(){Map<String,Object>map=newHashMap<String,Object>()mapput("key",map)JsonUtilmapJson(map)}好在服务器处理的JSON数据最终都应该转化为简单的JavaScript对象因此递归引用的可能性很小。最后通过Servlet或MVC框架输出JSON时需要设置正确的MIME类型(applicationjson)和字符编码。假定服务器使用编码则可以使用以下代码输出编码后的JSON文本:JSON入门指南https:wwwibmcomdeveloperworkscnwebwalojson第页共页:wangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightwangyabinHighlightresponsesetContentType("applicationjsoncharset=")responsesetCharacterEncoding("")PrintWriterpw=responsegetWriter()pwwrite(JsonUtiltoJson(obj))pwflush()小结JSON已经是JavaScript标准的一部分。目前主流的浏览器对JSON支持都非常完善。应用JSON我们可以从XML的解析中摆脱出来对那些应用Ajax的Web网站来说JSON确实是目前最灵活的轻量级方案。下载描述名字大小下载方法本文完整的源代码jeedevutilzipKBHTTP关于下载方法的信息参考资料学习掌握Ajax:阅读本系列以前的文章。JSONorg:访问JSONWeb站点来进一步了解这种数据格式包括到几种JSONAPI实现的链接。“掌握Ajax第部分:使用JSON进行数据传输”(developerWorks年月):了解如何将JavaScript对象转变成JSON格式。“掌握Ajax第部分:服务器端的JSON”(developerWorks年月):学习如何处理以JSON格式发送到服务器的数据以及如何使用相同格式对脚本进行回复。“从XML生成可与Ajax共同使用的JSON”(developerWorks年月):通过本文发掘使用XSLTV从XML数据生成JSON的几种不同方法。“用PHP将XML转换成JSON”(developerWorks年月):了解基于PHP的服务器程序在将企业应用程序数据发送给浏览器应用程序之前如何将其从XML格式转换成JSON格式。developerWorksAjax技术资源中心:能找到更多关于Ajax技术的文章和教程。developerWorksWeb开发技术专区:提供了关于Web开发和架构方面的大量文章。浏览技术书店查阅有关本文所述主题以及其他技术主题的书籍。讨论查看developerWorksblogs加入developerWorks社区。关于作者廖雪峰长期从事JEEJME开发对OpenSource框架有深入研究。目前廖雪峰创建了JavaEE开发网(http:wwwjavaeedevcom)著有《Spring核心技术与最佳实践》一书。关闭xIBMID:需要一个IBMID?忘记IBMID?密码:忘记密码?更改您的密码JSON入门指南https:wwwibmcomdeveloperworkscnwebwalojson第页共页:wangyabinHighlight保持登录。单击提交则表示您同意developerWorks的条款和条件。使用条款当您初次登录到developerWorks时将会为您创建一份概要信息。您在developerWorks概要信息中选择公开的信息将公开显示给其他人但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在developerWorks发布的内容一同显示。所有提交的信息确保安全。关闭x当您初次登录到developerWorks时将会为您创建一份概要信息您需要指定一个昵称。您的昵称将和您在developerWorks发布的内容显示在一起。昵称长度在至个字符之间。您的昵称在developerWorks社区中必须是唯一的并且出于隐私保护的原因不能是您的电子邮件地址。昵称:(长度在至个字符之间)单击提交则表示您同意developerWorks的条款和条件。使用条款所有提交的信息确保安全。平均分(个评分)星星星星星星星星星星添加评论:请登录或注册后发表评论。注意:评论中不支持HTML语法有新评论时提醒我剩余字符JSON入门指南https:wwwibmcomdeveloperworkscnwebwalojson第页共页:打印此页面分享此页面关注developerWorks帮助联系编辑提交内容网站导航订阅源在线浏览每周时事通讯报告滥用使用条款隐私条约浏览辅助共有评论()显示:可以使用http:wwwbejsoncom来做JSON的格式化、校验、视图、转义由沙家三少于March报告滥用权威资料由shengfq于November报告滥用厉害http:weibocomsuizhikuo由随智阔于May报告滥用学习了由听歌在唱于March报告滥用JSON的全称N真是Natation???由实而不华于February报告滥用IBM教育学院教育培养计划IBM创业企业全球扶持计划ISV资源(英语)JSON入门指南https:wwwibmcomdeveloperworkscnwebwalojson第页共页:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评