`

json优缺点

 
阅读更多
XML——这种用于表示客户端与服务器间数据交换有效负载的格式,几乎已经成了Web services的同义词。然而,由于Ajax和REST技术的出现影响了应用程序架构,这迫使人们开始寻求`XML的替代品,如:JavaScript Object Notation(JSON)。

  JSON 作为一种更轻、更友好的 Web services客户端的格式(多采用浏览器的形式或访问 REST风格 Web服务的Ajax应用程序的形式)引起了 Web 服务供应商的注意。

XML的十字路口: 浏览器和 Ajax
  XML设计原理已经发布了将近十年。时至今日,这种标记语言已经在广阔的软件应用领域中占据了主导地位。从Java、.NET等主流平台中的配置和部署描述符到应用集成场景中更复杂的应用,XML与生俱来的语言无关性使之在软件架构师心目中占据着独特的地位。但即便最著名的XML权威也不得不承认:在某些环境中,XML的使用已经超出了它自身能力的极限。

  围绕Ajax原理构建的那些Web应用程序最能说明XML的生存能力,从这一点来看,一种新的有效负载格式的发展壮大也得益于XML。这种新的有效负载格式就是JavaScript Object Notation (JSON)。在探索这种新的标记语言的复杂性之前,首先来分析一下在这种独特的设计形式中,XML具有哪些局限性。

  Ajax建立了一个用于从远程Web services发送和接收数据的独立信道,从而允许Web程序执行信道外(out-of-band)客户端/服务器调用。通俗地说,Ajax程序中的更新和导航序列在典型的客户端/服务器环境之外完成,在后台(即信道外)接受到信息后,必须进行一次完整的屏幕刷新。更多背景信息,请参阅David Teare的 Ajax简介(Dev2Dev)。

  这些应用程序更新通常是通过REST风格(RESTful)Web services获得的,一旦被用户的浏览器接收到,就需要整合到HTML页面的总体布局之中,这正是XML发挥强大力量的场合。尽管近年来,脚本语言支持和插件支持已使大多数主流浏览器的功能得到了强化,但许多编程任务依然难于开展,其中之一就是操纵或处理文本,这通常是使用DOM实现的。

  采用DOM的复杂性源于其基于函数的根,这使得对数据树的简单修改或访问都需要进行无数次方法调用。此外,众所周知,DOM在各种浏览器中的实现细节不尽相同,这一过程将带来极为复杂的编程模式,其跨浏览器兼容性出现问题的可能性极大。接下来的问题显而易见,那就是:如何使一种标记语言轻松集成到HTML页面中以满足Ajax的要求?

  问题的答案就是:利用所有主流浏览器中的一种通用组件——JavaScript引擎。XML需要使用DOM之类的机制来访问数据并将数据整合到布局之中,采用这种方法,我们不再使用像XML这样的格式来交付Ajax更新,而是采用一种更为简单直观的方式,采用JavaScript引擎自然匹配的格式——也就是JSON。

  既然已经明确了JSON与XML和Ajax之间的关系,下面将进一步探讨JSON背后的技术细节。

JSON剖析:优点和不足
  对于JSON,首先要明白JSON和XML一样也是一种简单文本格式。相对于XML,它更加易读、更便于肉眼检查。在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。下图是一个JSON有效负载:

Java代码
{"addressbook": {"name": "Mary Lebow",   
    "address": {   
        "street": "5 Main Street"  
        "city": "San Diego, CA",   
        "zip": 91912,   
    },   
    "phoneNumbers": [   
        "619 332-3452",   
        "664 223-4667"  
    ]   
}   
}  
{"addressbook": {"name": "Mary Lebow",
    "address": {
        "street": "5 Main Street"
        "city": "San Diego, CA",
        "zip": 91912,
    },
    "phoneNumbers": [
        "619 332-3452",
        "664 223-4667"
    ]
}
}  将上面的JSON有效负载用XML改写,如下:


Xml代码
<addressbook>  
<name>Mary Lebow</name>  
<address>    
    <street>5 Main Street</street>  
    <city zip="91912"> San Diego, CA </city>  
    <phoneNumbers>  
      <phone>619 332-3452</phone>  
      <phone>664 223-4667</phone>  
    </phoneNumbers>  
</address>  
</addressbook>  
<addressbook>
<name>Mary Lebow</name>
<address>
    <street>5 Main Street</street>
    <city zip="91912"> San Diego, CA </city>
    <phoneNumbers>
      <phone>619 332-3452</phone>
      <phone>664 223-4667</phone>
    </phoneNumbers>
</address>
</addressbook>  是不是很相似?但它们并不相同。下面将详细阐述采用JSON句法的优点和不足。

优点
  乍看上去,使用JSON的数据分隔符的优点可能并不那么明显,但存在一个根本性的缘由:它们简化了数据访问。使用这些数据分隔符时, JavaScript引擎对数据结构(如字符串、数组、对象)的内部表示恰好与这些符号相同。

  这将开创一条比DOM技术更为便捷的数据访问途径。下面列举几个JavaScript代码片段来说明这一过程,这些代码片段会访问先前的JSON代码片段中的信息:

访问JSON中的名称: addressbook.name
访问JSON中的地址: addressbook.address.street
访问JSON中的电话号码第一位:addressbook.address.phoneNumbers[0]
  如果您具备DOM编程经验,就能很快地看出区别;新手可以参看 Document Object Model 的这一外部资源,这里提供了关于数据导航的实例。

  JSON的另一个优点是它的非冗长性。在XML中,打开和关闭标记是必需的,这样才能满足标记的依从性;而在JSON中,所有这些要求只需通过一个简单的括号即可满足。在包含有数以百计字段的数据交换中,传统的XML标记将会延长数据交换时间。目前还没有正式的研究表明JSON比XML有更高的线上传输效率;人们只是通过简单的字节数比较发现,对于等效的JSON和XML有效负载,前者总是小于后者。至于它们之间的差距有多大,特别是在新的XML压缩格式下它们的差距有多大,有待进一步的研究。

  此外,JSON受到了擅长不同编程语言的开发人员的青睐。这是因为无论在Haskell中或 Lisp中,还是在更为主流的C#和PHP中,开发都可以方便地生成JSON(详见 参考资料)。

不足
  和许多好东西都具有两面性一样,JSON的非冗长性也不例外,为此JSON丢失了XML具有的一些特性。命名空间允许不同上下文中的相同的信息段彼此混合,然而,显然在JSON中已经找不到了命名空间。JSON与XML的另一个差别是属性的差异,由于JSON采用冒号赋值,这将导致当XML转化为JSON时,在标识符(XML CDATA)与实际属性值之间很难区分谁应该被当作文本考虑。

  另外,JSON片段的创建和验证过程比一般的XML稍显复杂。从这一点来看,XML在开发工具方面领先于JSON。尽管如此,为了消除您对这一领域可能存在的困惑,
分享到:
评论

相关推荐

    JSON完整使用教程

    ##### 1.4 JSON优缺点 **优点**: - **轻巧灵活**:JSON相比XML等其他数据交换格式更为轻巧,易于处理。 - **无需特定头部**:JSON数据可以直接发送,无需服务器端发送特定的内容类型头部信息。 - **跨平台兼容性**...

    JSON与XML优缺点对比分析

    下面我们将从多个方面详细对比分析JSON和XML的优缺点。 首先,从定义上来看,XML是一种标记语言,用于定义电子文件的结构,提供了一种组织数据的方法,并通过DTD文档类型定义来维持数据格式的一致性。XML文件能够...

    json基本介绍及优缺点.zip

    6. **缺点**:JSON不支持注释,这在处理大型复杂数据时可能会带来不便。另外,对于非结构化数据,JSON可能不是最佳选择,因为它需要预定义的数据结构。 产品说明.zip可能包含了一个或多个具体的JSON实例,展示了...

    unity 3D读取文件(excel和json)

    Excel和JSON都是常见的数据存储格式,因为它们易于编辑和理解。本篇文章将详细探讨如何在Unity中读取Excel和JSON文件,帮助开发者更有效地管理项目中的数据。 首先,我们来看Unity读取Excel文件的方法。Excel文件...

    json.zip_JSON_c/c++ json_c/c++ json 解析_json解析 c++_解析json

    8. **其他C++ JSON库**:除了nlohmann/json,还有其他的库可供选择,如RapidJSON、JsonCpp等,它们各有优缺点,开发者可以根据项目需求选择合适的库。 通过理解和应用这些知识点,你可以在C++中高效地解析和处理...

    使用JSON作为函数的参数的优缺点

    在JavaScript编程中,使用JSON(JavaScript Object Notation)对象作为函数参数有诸多优点,但也存在一些潜在的缺点。本文将详细探讨这两种方式的差异,并通过示例代码展示它们的应用。 ### 1. JSON参数的优点: #...

    ASP解析JSON方法

    在现代Web开发中,JSON...每种方法都有其适用场景和优缺点。客户端解析适合简单的数据展示,而服务器端解析更适合需要保护数据隐私或需要进行复杂数据处理的情况。在实际项目中,应根据需求选择最合适的解析方法。

    JSON入门教程.pdf

    JSON 的优缺点 优点: * JSON 的数据格式非常简单和灵活。 * JSON 可以传输简单的 String、Number、Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。 * JSON 是基于纯文本的数据格式,易于在不同的平台...

    转换为json数据以及完整的json包

    - JSON库对比:了解不同库的优缺点,根据项目需求选择最适合的,如Gson更适合简单场景,而Jackson提供更高级的功能。 总结,将结果集转换为JSON数据以及构建JSON包是常见的数据处理操作,特别是在Web服务和API开发...

    C# 后台序列化Json序列、反序列化Json序列(三种方法)

    以上三种方法各有优缺点。Json.NET功能强大,社区支持广泛,但可能引入额外的依赖。System.Text.Json则更轻量级,性能更优,适合对性能有较高要求的场景。ASP.NET Web API的ModelBinder简化了Web服务的开发,但仅...

    cpp-JSONC的JSON解析器

    9. **与其他库的比较**:在C++中处理JSON还有其他选择,如nlohmann/json(一个现代C++ JSON库),RapidJSON(快速且小巧的JSON解析器/生成器),它们各有优缺点,开发者应根据项目需求选择合适的库。 10. **学习...

    json_addressbook.zip

    标签中的"json"和"xml"都是数据交换格式,它们都有各自的优缺点。XML提供了一种严格的结构,支持复杂的文档和数据模型,但其语法较为冗长。而JSON则更偏向于数据表示,适合轻量级的交互。 压缩包内的“json.js”...

    json 所有jar包下载

    开发者应当根据项目需求评估不同库的优缺点,选择最适合的那个进行下载和集成。在下载过程中,确保从可靠的源获取jar包,避免引入潜在的安全风险。同时,了解每个库的API和使用方法,以便高效地进行JSON操作。

    json-jar包

    不同库有各自的优缺点,选择哪种取决于项目的具体需求,如性能、灵活性、学习曲线等。对于初学者来说,Gson和Jackson通常是个不错的起点,因为它们都有详细的文档和丰富的社区支持。而对性能有较高要求的项目,可能...

    java json xml转换

    JSON和XML各有优缺点。JSON以其简洁、易于阅读和生成而受到青睐,尤其适合在网络传输中使用;XML则因其强大的结构化能力,用于复杂的文档和数据存储。在Java环境中,我们通常使用Jackson、Gson和JAXB等库来完成这两...

    json_lib 的压缩包

    还有其他流行的替代品,如Gson、Jackson和org.json等,它们各有优缺点,选择哪一个取决于你的具体需求和项目环境。如果你遇到性能问题或者需要更高级的功能,可能需要评估并选择更适合的JSON库。 总结来说,`json-...

    java转json的包

    每个库都有其优缺点,选择哪种库取决于具体需求,如性能、易用性、灵活性以及项目已有依赖等。在实际项目中,Jackson和Gson通常是最受欢迎的选择,因为它们功能强大,性能优异,且易于使用。而其他库在特定场景下也...

Global site tag (gtag.js) - Google Analytics