文章目录
  1. 1. XML
    1. 1.1. 优点
    2. 1.2. 缺点
    3. 1.3. 实例
  2. 2. JSON
    1. 2.1. 优点
    2. 2.2. 缺点
    3. 2.3. 实例
  3. 3. YAML
    1. 3.1. 优点
    2. 3.2. 缺点
    3. 3.3. 适用范围
    4. 3.4. 实例
  4. 4. JSON和XML比较
    1. 4.1. 关于轻量级和重量级
    2. 4.2. 关于数据格式编码机解析难度
      1. 4.2.1. 编码
      2. 4.2.2. 解析
    3. 4.3. 其他
  5. 5. 直接使用普通字符串进行传输的缺点

目前比较流行的几种数据交换格式主要有:

  • XML
  • JSON
  • YAML

下面就分别简单介绍一下他们。

XML

extensible markup language,一种类似于HTML的语言,他没有预先定义的标签,使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。相比之JSON这种 轻量级的数据交换格式,XML可以称为重量级的了。

优点

  1. 格式统一,符合标准
  2. 容易与其他系统进行远程交互,数据共享比较方便

缺点

  1. XML文件庞大,文件格式复杂,传输占带宽
  2. 服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护
  3. 客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码
  4. 服务器端和客户端解析XML花费较多的资源和时间

实例

<people>
    <name>never</name>
    <age>23</age>
</people>
<people>
    <name>leo</name>
    <age>24</age>
</people>

JSON

JavaScript Object Notation 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

优点

  1. 数据格式比较简单,易于读写,格式都是压缩的,占用带宽小
  2. 易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取
  3. 支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析
  4. 在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取
  5. 因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护

缺点

  1. 没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性
  2. 数据描述性不如XML

实例

{
    "people": [
        {
            "name": "never",
            "age": 23
        },
        {
            "name": "leo",
            "age": 24
        }
    ]
}

YAML

YAML是一种直观的能够被电脑识别的的数据数据序列化格式换种说法,YAML是一种很简单的类似于XML的数据描述语言,语法比XML简单很多,使用空格缩进来表示层次结构。YAML试图用一种比XML更敏捷的方式,来完成XML所完成的任务。但YAML不是XML。

YAML的语法比JSON复杂,JSON可以看作YAML的一个子集

优点

  1. 可读性好
  2. 和其它脚本语言的交互性好
  3. 使用实现语言的数据类型
  4. 提供了一个一致的信息模型
  5. 可以基于流来处理
  6. 表达能力强,扩展性好
  7. 易于实现

缺点

  1. 兼容性问题,不同语言间的数据流转,建议现在不要用YAML
  2. 没有提供方案或者DTD概念,无法验证文件格式是否符合预期。
  3. 使用范围较小,不是非常成熟。

适用范围

  1. 由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用
  2. YAML比较适合做序列化。因为它是宿主语言数据类型直转的
  3. YAML做配置文件也不错。比如Ruby on Rails的配置就选用的YAML

实例

---
people:
    name: never
    age: 23
---
people:
    name: leo
    age: 24

或者

---
people:{name: never, age: 23}
---
people:{name: leo, age: 24}

JSON和XML比较

关于轻量级和重量级

这个体现在解析上。

XML目前设计了三种解析方式:DOM、SAX和pull;

DOM是把一个XML看成一个DOM对象,需要把XML文件整个读入内存,这一点上JSON和XML的原理是一样的,但是XML要考虑父节点和子节点,这一点上JSON的解析难度要小很多,因为JSON构建于两种结构:key/value,键值对的集合;值的有序集合,可理解为数组;

SAX不需要整个读入文档就可以对解析出的内容进行处理,是一种逐步解析的方法。程序也可以随时终止解析。这样,一个大的文档就可以逐步的、一点一点的展现出来,所以SAX适合于大规模的解析。这一点,JSON目前是做不到得。(Pull和SAX比较类似)

所以,JSON和XML的轻/重量级的区别在于:JSON只提供整体解析方案,而这种方法只在解析较少的数据时才能起到良好的效果;而XML提供了对大规模数据的逐步解析方案,这种方案很适合于对大量数据的处理。

关于数据格式编码机解析难度

编码

虽然XML和JSON都有各自的编码工具,但是JSON的编码要比XML简单,即使不借助工具,也可以写出JSON代码,但要写出好的XML代码就有点困难;与XML一样,JSON也是基于文本的,且它们都使用Unicode编码,且其与数据交换格式XML一样具有可读性。

主观上来看,JSON更为清晰且冗余更少些。JSON网站提供了对JSON语法的严格描述,只是描述较简短。从总体来看,XML比较适合于标记文档,而JSON却更适于进行数据交换处理。

解析

在普通的web应用领域,开发者经常为XML的解析伤脑筋,无论是服务器端生成或处理XML,还是客户端用 JavaScript 解析XML,都常常导致复杂的代码,极低的开发效率。

实际上,对于大多数Web应用来说,他们根本不需要复杂的XML来传输数据,XML宣称的扩展性在此就很少具有优势,许多Ajax应用甚至直接返回HTML片段来构建动态Web页面。和返回XML并解析它相比,返回HTML片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。同XML或 HTML片段相比,数据交换格式JSON 提供了更好的简单性和灵活性。

其他

  1. 可读性

    JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些

  2. 可扩展

    XML天生有很好的扩展性,JSON当然也有,没有什么是XML不能扩展,而JSON却不能。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势。

  3. 编码难度

    XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了

  4. 解码难度

    XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说

  5. 解析手段

    JSON和XML同样拥有丰富的解析手段。

  6. 数据体积

    JSON相对于XML来讲,数据的体积小,传递的速度更快些

  7. 数据交互

    JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互

  8. 数据描述

    JSON对数据的描述性比XML较差

  9. 传输速度

    JSON的速度要远远快于XML

直接使用普通字符串进行传输的缺点

数据的可读性会非常差,而且功能单一,数组、list、对象传输都比较困难。

文章目录
  1. 1. XML
    1. 1.1. 优点
    2. 1.2. 缺点
    3. 1.3. 实例
  2. 2. JSON
    1. 2.1. 优点
    2. 2.2. 缺点
    3. 2.3. 实例
  3. 3. YAML
    1. 3.1. 优点
    2. 3.2. 缺点
    3. 3.3. 适用范围
    4. 3.4. 实例
  4. 4. JSON和XML比较
    1. 4.1. 关于轻量级和重量级
    2. 4.2. 关于数据格式编码机解析难度
      1. 4.2.1. 编码
      2. 4.2.2. 解析
    3. 4.3. 其他
  5. 5. 直接使用普通字符串进行传输的缺点