首页 文章

JSON和XML比较[关闭]

提问于
浏览
255

我想知道哪个更快:XML和JSON?什么时候使用哪一个?

6 回答

  • 233

    在回答何时使用哪一个,有一点背景之前:

    编辑:我应该提一下,这种比较实际上是从在JavaScript浏览器中使用它们的角度来看 . 它不是必须使用数据格式的方式,并且有很多好的解析器会改变细节以使我所说的不太有效 .

    JSON更紧凑,并且(在我看来)更具可读性 - 在传输中它可以“更快”,因为传输的数据更少 .

    在解析中,它取决于您的解析器 . 将代码(无论是JSON还是XML)转换为数据结构(如 Map )的解析器可能会受益于XML的严格性质(XML Schemas很好地消除数据结构的歧义) - 但是在JSON中,项目的类型(String / Number) / Nested JSON Object)可以在语法上推断,例如:

    myJSON = {"age" : 12,
              "name" : "Danielle"}
    

    解析器不需要足够智能就能意识到 12 代表一个数字,(和 Danielle 是一个像任何其他字符串一样的字符串) . 所以在javascript中我们可以这样做:

    anObject = JSON.parse(myJSON);
    anObject.age === 12 // True
    anObject.name == "Danielle" // True
    anObject.age === "12" // False
    

    在XML中,我们必须执行以下操作:

    <person>
        <age>12</age>
        <name>Danielle</name>
    </person>
    

    (顺便说一句,这说明了XML更加冗长;数据传输的一个问题) . 要使用这些数据,我们将通过解析器运行它,然后我们必须调用类似的东西:

    myObject = parseThatXMLPlease();
    thePeople = myObject.getChildren("person");
    thePerson = thePeople[0];
    thePerson.getChildren("name")[0].value() == "Danielle" // True
    thePerson.getChildren("age")[0].value() == "12" // True
    

    实际上,一个好的解析器可能会为你输入 age (另一方面,你可能不希望它) . 's going on when we access this data is - instead of doing an attribute lookup like in the JSON example above - we'在键 name 上进行 Map 查找 . 像这样形成XML可能更直观:

    <person name="Danielle" age="12" />
    

    但我们仍然需要进行 Map 查找才能访问我们的数据:

    myObject = parseThatXMLPlease();
    age = myObject.getChildren("person")[0].getAttr("age");
    

    编辑:原文:

    在大多数编程语言中(并非所有编程语言),像这样的 Map 查找将比属性查找更昂贵(就像我们在解析JSON时得到的那样) .

    这是误导性的:请记住,在JavaScript(和其他动态语言)中, Map 查找和字段查找之间没有区别 . 实际上,字段查找只是一个 Map 查找 .

    如果您想进行真正有 Value 的比较,最好是对其进行基准测试 - 在您计划使用数据的上下文中执行基准测试 .

    正如我一直打字的那样,Felix Kling已经提出了一个相当简洁的答案,比较它们何时使用每一个,所以我不再继续下去了 .

  • 212

    更快不是JSON或XML的属性,或者是这些属性之间的比较会产生的结果 . 如果有,则它是解析器的属性或传输数据的带宽 .

    以下是(开头)JSON和XML的优缺点列表:


    JSON

    Pro:

    • 简单语法,与XML相比,其开销更少"markup" .

    • 易于使用JavaScript,因为标记是JS对象文字符号的子集,并且具有与JavaScript相同的基本数据类型 .

    • JSON Schema用于描述和数据类型以及结构验证

    • JsonPath用于提取深层嵌套结构中的信息

    Con:

    • 简单语法,仅支持少数几种不同的数据类型 .

    • 不支持评论 .


    XML

    Pro:

    • 广义标记;可以为任何目的创建"dialects"

    • XML Schema用于数据类型,结构验证 . 使它也可以创建新的数据类型

    • XSLT用于转换为不同的输出格式

    • XPath / XQuery用于在深层嵌套结构中提取信息

    • 内置对名称空间的支持

    Con:

    • 与JSON相比相对冗长(导致相同数量信息的数据更多) .

    所以最后你必须决定你需要什么 . 显然,这两种格式都有其合法用例 . 如果您主要使用JavaScript,那么您应该使用JSON .

    请随意添加利弊 . 我不是XML专家;)

  • 15

    然而,处理速度可能不是唯一的相关问题,因为这是一个问题,以下是基准测试中的一些数字:JSON vs. XML: Some hard numbers about verbosity . 对于速度,在这个简单的基准测试中,XML比JSON提供了21%的开销 .

    关于详细程度的一个重要说明,正如文章所说,最常见的抱怨:这在实践中并不那么重要(XML和JSON数据通常都不是由人类处理,而是由机器处理),即使是关于速度,它需要一些合理的时间压缩 .

    此外,在此基准测试中,处理了大量数据,并且典型的Web应用程序将不会传输大小为90MB的此类大小的数据块,并且压缩可能不是有益的(对于足够小的数据块,压缩块)将比未压缩的块更大,因此不适用 .

    尽管如此,如果不涉及压缩,JSON显然会更加轻松,特别是如果通过WebSocket连接进行传输,那么缺少经典的HTTP开销可能会使JSON的优势更加突出,甚至更多重大 .

    传输后,将消耗数据,并计入总处理时间 . 如果要传输大量或复杂的数据,缺少由验证XML解析器自动检查的模式,可能需要对JSON数据进行更多检查;这些检查必须在JavaScript中执行,而这种检查并不是特别快,因此在这种情况下它可能会带来额外的XML开销 .

    无论如何, only testing will provides the answer for your particular use‑case (如果速度真的是唯一的问题,而不是标准,也不是安全,也不是诚信......) .

    更新1:值得一提的是,EXI是一种二进制XML格式,它以比使用Gzip更低的成本提供压缩,并节省了解压缩压缩XML所需的处理 . EXI是XML,BSON是JSON的 . 这里有一个快速概述,并提到空间和时间的效率:EXI: The last binary standard? .

    更新2:W3C也存在二进制XML性能报告,因为效率和低内存以及CPU占用空间也是XML领域的问题:Efficient XML Interchange Evaluation .

    更新2015-03-01

    值得在此上下文中注意到,因为HTTP开销是一个问题:IANA已注册EXI编码(上面提到的高效二进制XML),作为HTTP协议的内容编码(以及compress,deflate和gzip) . 这意味着EXI是可以预期浏览器可能在其他HTTP客户端之间理解的选项 . 见Hypertext Transfer Protocol Parameters (iana.org) .

  • 6

    我发现this article at digital bazaar非常有趣 . 引用他们的报价来自Norm:

    关于JSON专业人士:

    如果要传递的只是原子值或原子值的列表或散列,JSON具有XML的许多优点:它可以直接在Internet上使用,支持各种各样的应用程序,编写程序来处理JSON很容易它具有很少的可选功能,人性化且清晰,设计简洁,JSON文档易于创建,并且使用Unicode . ...

    关于XML专业人士:

    XML非常好地处理非结构化数据的丰富性 . 我并不担心XML的未来,即使它的死亡是由一群网络API设计师兴高采烈地庆祝的 . 我无法抗拒说“我告诉你了!”令牌在我的 table 上 . 我期待看到JSON人员在被要求开发更丰富的API时会做些什么 . 当他们想要交换结构不太好的数据时,他们会把它变成JSON吗?我偶尔会看到JSON的模式语言,其他语言会跟随吗? ...

    我个人同意Norm . 我认为大多数针对XML的攻击来自Web开发人员的典型应用程序,而不是来自集成开发人员 . 但那是我的看法! ;)

  • 20

    XML(可扩展标记语言)通常用于XHR,因为它是标准的广播语言,可以被任何编程语言使用,并且支持服务器和客户端,因此这是最灵活的解决方案 . XML可以分开以获得更多部分,因此指定的组可以开发程序的一部分,而不会影响其他部分 . XML格式也可以由XML DTD或XML Schema(XSL)确定,并且可以进行测试 .

    JSON是一种数据交换格式,它作为JavaScript应用程序可能的格式变得越来越流行 . 基本上这是一个对象符号数组 . JSON具有非常简单的语法,因此可以轻松学习 . 此外,JavaScript支持使用 eval 函数解析JSON . 另一方面, eval 函数有负数 . 例如,程序解析JSON的速度非常慢,并且由于安全性, eval 可能非常危险 . 这并不意味着JSON不好,只是我们必须更加小心 .

    我的建议是你应该将JSON用于轻量级数据交换的应用程序,比如游戏 . 因为您不必非常关心数据处理,所以这非常简单快速 .

    XML最适合大型网站,例如购物网站或类似的东西 . XML可以更安全和清晰 . 您可以创建基本的数据结构和模式,以便轻松测试校正并轻松地将其分成几部分 .

    我建议您使用XML因为速度和安全性,但JSON用于轻量级的东西 .

  • 14

    关于JSON的重要一点是出于安全原因加密数据传输 . 毫无疑问,JSON比XML快得多 . 我已经看到XML占用100ms,因为JSON只需要60ms . JSON数据易于操作 .

相关问题