XML与JSON的对比

XML与JSON的对比

1、各自定义

XML

扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。 JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:

“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

关于JSON的更多描述,可见:http://json.org

2.XML和JSON对比

XML

1)应用广泛,可扩展性强,被广泛应用各种场合 2)读取、解析没有JSON快 3)可读性强,可描述复杂结构

XML的应用已经深入人心,不再赘述。

JSON 1)结构简单,都是键值对。 2)读取、解析速度快,很多语言支持 3)传输数据量小,传输速率大大提高

4)描述复杂结构能力较弱

JavaScript、PHP等原生支持,简化了读取解析。成为当前互联网时代普遍应用的数据结构。

3、XML与JSON转换

常常会用到XML与JSON之间的转换,在这里可以更加清晰了解两者之间的区别。

1)常规转换

常规的节点转换,以下的案例能够直观的看到彼此之间的转换原理。

XML是节点名与值,JSON也是KEY与VALUE的键值对。这样的转换是最简单的。

XML:

<Student>张三</Student>

转为JSON:

{ "Student": "张三" }

这个过程是可逆的,JSON可以很简单转为XML。

2) XML节点含有属性

节点含有属性,其转换就不同了,在JSON中,XML属性也作为了JSON对象的属性,为了区别与其他的节点,这里节点名增加特殊的前缀标识"@"以标识是属性,

另外一个比较奇怪的是,节点的值,增加属性名,且有特殊前缀,“#text”。这样的处理可以使得XML与JSON的转换实现可逆操作。JSON中@开头的,转为XML时,需要生成节点属性,#text则为节点的内容。这里的转换是常用的转换器的通用做法。

以下的转换例子

XML:

<Student ID="1001">张三</Student>

转为JSON

{
  "Student": {
    "@ID": "1001",
    "#text": "张三"
  }
}

3)有属性的节点生成对象

例1,无属性节点,简单的字符串数组

<line>
 <item>name</item>
 <item>age</item>
</line>

转为JSON:

{
  "line": {
    "item": [
      "name",
      "age"
    ]
  }
}

例2,有属性的转为对象,无属性的则直接转为字符串

有属性节点

<line>
 <item font-size="20">name</item>
 <item>age</item>
</line>

转为JSON:

{
  "line": {
    "item": [
      {
        "@font-size": "20",
        "#text": "name"
      },
      "age"
    ]
  }
}

4) XML的节点顺序性

XML存在着节点之间的顺序,但当转为JSON后,有时顺序会被打乱。

这一点,可以解释XML与JSON的一大不同,描述结构顺序性,特别是复杂结构时,JSON没有XML清晰简单。

以下的例子,我们可以清晰看到这一点,转换不可逆。

例子:

XML:

<template>
  <block>天空</block>
  <line>地平线</line>
  <block>地下</block>
</template>

转变为JSON:

{
  "template": {
    "block": [
      "天空",
      "地下"
    ],
    "line": "地平线"
  }
}

在这里,我们可以看到在JSON中,将两个block放到了一起,中间的line则放到了后面,XML原有的节点顺序就此打乱。

如果想从此JSON转为原来的XML,已经不可能。

如果非要较真,当然可以在JSON中指定具体的属性,标识其顺序或者前后节点之间的关系,但是这样做,确实增加复杂度。

4、XML的属性与元素对比

属性无法包含多重的值(元素可以) 属性无法描述树结构(元素可以) 属性不易扩展(为未来的变化) 属性难以阅读和维护

如下的XML感觉很愚蠢:

<message time="2014-10-01 10:10:02" to="Lucy" from="Jim" body="Don‘t forget the meeting!"></message>

应该为:

<message>
  <from>Jim</from>
  <to>Lucy</to>
  <time>2014-10-01 10:10:02</time>
  <body>Don‘t forget the meeting!</body>
</message>

原则:

元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

5、建议选择原则

1)对于复杂的数据结构使用XML,简单的数据结构可采用JSON。

2)在互联网应用中数据传输中,提倡使用JSON。

3)针对前后端的差异,可以在服务端使用XML,在前端使用JSON,两者之间的转换在服务器端完成。这样可以各取所长。

时间: 2024-08-24 05:58:51

XML与JSON的对比的相关文章

XML和JSON的对比

简介: 客户端和服务器之间进行数据交互时,服务器往往会返回给客户端一定格式的数据.一般而言,服务器返回给客户端的数据为JSON或者XML文档格式的数据(文件下载除外).下面就针对于这两种数据格式分别介绍. (一)JSON数据解析: 特点: JSON来自民间,是一种轻量级的数据格式. 特点是:体积小,传输快,所以百分之八十的数据都是用JSON格式. 格式: JSON的格式很像OC中的字典和数组,例如: {"name" : "jack", "age"

数据交换格式XML和JSON对比

1.简介: XML:extensible markup language,一种类似于HTML的语言,他没有预先定义的标签,使用DTD(document type definition)文档类型定义来组织数据:格式统一,跨平台和语言,早已成为业界公认的标准.具体的可以问Google或百度.相比之JSON这种轻量级的数据交换格式,XML可以称为重量级的了. JSON : JavaScript Object Notation 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基

XML和JSON的一个详细对比

1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准.XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输.XML 提供统一的方法来描述和交换独立于应用程序

jQueru中数据交换格式XML和JSON对比

1.简介: XML:extensible markup language,一种类似于HTML的语言,他没有预先定义的标签,使用DTD(document type definition)文档类型定义来组织数据:格式统一,跨平台和语言,早已成为业界公认的标准.具体的可以问Google或百度.相比之JSON这种轻量级的数据交换格式,XML可以称为重量级的了. JSON : JavaScript Object Notation 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基

xml,json和各种序列化工具的对比

xml.json的优势,在与可以实现树形数据的存储:可以用来表达各种形式的信息: c/cpp的结构体,也可以用来保存各种形式的信息,在schema这一层,两者是等价的: 而pb.thrift.avro-rpc等,都是使用紧凑的结构体来表达非紧凑的树形信息:这样,数据传输量更小,更快: 所以,在不考虑资源占用的情况下,使用xml.json是比较好的方式

全面剖析XML和JSON

1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准.XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输.XML 提供统一的方法来描述和交换独立于应用程序

Windows 10开发基础——XML和JSON (二)

主要内容: Linq to XML Newtonsoft.Json.Linq来解析JSON 博客园RSS(http://www.cnblogs.com/rss)的解析 UWP调用自己实现的Web API 1.Linq to XML     Linq to XML不是一个新鲜的话题了,网上以及各种资料对这个介绍都比较多.今天就简单了解下,不做深入的研究...在代码中生成XML文档,使用Linq to XML会比Windows.Data.Xml.Dom命名空间下的类简单,使用起来也更加灵活.Linq

由SOAP说开去 - - 谈谈WebServices、RMI、RPC、SOA、REST、XML、JSON

引子: 关于SOAP其实我一直模模糊糊不太理解,这种模模糊糊的感觉表述起来是这样: 在使用web服务时(功能接口),本来我就可以通过安卓中固有的http类(使用http协议),来发送http请求,并且解析返回的数据(一般是xml或者json),得到我要的结果 为什么还非得多此一举使用soap呢,而且soap自己的介绍也说,它其实没有发明技术,它其实就是http+xml 在安卓中使用soap的方法是:(下载第三方类库),装配一个soap请求体,使用soap包装过的http类,通过http把请求体发

C# 二进制、Xml、Json序列化和反序列化

昨天利用业余时间对比了下C#中三种序列化方式(二进制.Xml.Json),综合来看json方式生成的字节数组长度最短,但当你需要序列化的对象中包括byte[]类型,且其长度较长时,序列化后,xml方式的长度较json方式更短.xml方式中对byte[]做了base64转换. 最后综合三种情况,写了一个基于泛型的通用类来完成序列化和反序列化操作,仅供参考,若有什么错误之处,还请指教. using System; using System.Collections.Generic; using Sys