我正在寻找 JSON 和 XML 之间的区别。因为,两者都是用于系统之间的数据交换,但是 JSON 和 XML 之间有很大的区别,即 JSON 比 XML 更轻量级。但我无法找到 JSON 轻量级的真正原因。是什么让 JSON 轻量级?
我发现的一个答案是,在 JSON 中没有很多额外的 xml 标记。实际是什么意思。还有更多的原因可以描述为什么 JSON 是轻量级的吗?
您看过JSON 和 XML 文档的示例吗?
虽然 JSON 和 XML 都用于表示任意数据树,但 XML 更为冗长。树中的每个元素都有一个名称(元素类型名称),并且该元素必须包含在一对匹配的标签中。相比之下,JSON 以类似于 Javascript 的“嵌套数组”类型的符号表示树(事实上,JSON 文档可以按字面意思解析为 Javascript 以产生相应的数组)。
看看差异。
XML 当然在语义上更丰富,因为元素可以用任意数量的属性来装饰,并且元素可能包含自由文本流的混合内容以及嵌套元素。例如,将以下代码段表示为 JSON 会很乏味:
<paragraph>
This is an entire paragraph of <emph>text</emph>. It is interspersed with
further, nested <emph>XML elements</emph>, as well as the occasional
<link href="http://stackoverflow.com/a/12346394/596781">hyperlink</link>.
</paragraph>
另一方面,类似数据的文档在 JSON 中可以简单得多。想象一下:
<properties>
<property type="int" name="ID">123</property>
<property type="date" name="birthday">19700101</property>
<references>
<url>http://stackoverflow.com/a/12346394/596781</url>
<doi>something.made.up</doi>
</references>
</properties>
这变成了一个非常紧凑的 JSON 数组。
第二个考虑因素是围绕这两种格式的工具集的数量。虽然 JSON 工具主要用于解析 JSON 数据,但 W3C 一直在开发大量相关技术来以系统方式操作 XML,例如 XSLT 和 XPATH。
简而言之,作为一个非常个人的观点,我会说 XML 是关于文档的,而 JSON 是关于数据的。对于大型结构化文档,XML 会感觉更自然和有用,而 JSON 通常是用于传输数据集的更简单、更简洁的格式。
JSON 表示法更简洁。XML 在结束标记中重复节点类型,而 JSON 只是使用堆栈推断闭包范围。XML 支持命名空间,据我所知 JSON 不支持。XML 模式通常包含类型信息,但没有内在原因不能使用 JSON 执行此操作。应该注意的是,JSON 的兴起在很大程度上是因为它在所有实际使用的方面在功能上都等同于 XML 。一旦 LZW 压缩开始起作用,这种差异就消失了,因为 XML 很好地屈服于字典压缩。
数据模型不同。除了您自己注意到的缺少标记之外,JSON 还没有所有其他 XML 功能,例如:
因此,不仅数据本身更轻量级,任何实现数据模型的库也是如此。这使得使用非 JavaScript 语言渲染、解析和处理 JSON 的速度要快得多。对于 JavaScript,这是不费吹灰之力的,因为 JSON 是实际的 JavaScript 代码,因此对于 JavaScript 解析器来说更“轻量级”来处理
简单
XML 比 SGML 简单,但 JSON 比 XML 简单得多。JSON 的语法要小得多,并且更直接地映射到现代编程语言中使用的数据结构。
可扩展性
JSON 不可扩展,因为它不需要。JSON 不是一种文档标记语言,因此不需要定义新的标签或属性来表示其中的数据。
互操作性
JSON 具有与 XML 相同的互操作性潜力。
开放性
JSON 至少与 XML 一样开放,也许更开放,因为它不是企业/政治标准化斗争的中心。
这里有几个因素在起作用:
(a) JSON 数据模型更简单;它具有较少的不同种类的对象,并且它们具有较少的属性。
(b) JSON 数据模型更接近 Javascript 等常见编程语言中可用的数据模型,因此在使用这些语言时需要较少的数据转换
(c) JSON 的序列化语法比 XML 的语法具有更少的冗余(不太冗长)。
当然,这些差异是因为 JSON 的设计目的与 XML 不同。
它只是比线性因子小。那不是真的更小。压缩后,两种格式占用的空间大致相同。
请记住,已经必须使用 XML 的程序不会因为也允许 JSON 而变得更简单,它们会变得更复杂。除非您摆脱旧标准,否则额外的标准只会使事情复杂化,而且 XML 不会很快消失。
XML 是围绕文档的概念设计的。JSON 更多的是关于简单的数据结构。JSON 不太关心标准,即它没有模式,因此与熟练使用 XML 的人相比,可移植性可能更困难。通常当我必须使用一些 ReSTful 服务时,我会被告知“阅读代码”或“查看 JSON 数据本身”以便理解它。即隐式(并且经常改变)数据格式。
这两种格式都存在这样一个问题,即它们只能以自然形式表示树,而不是数据图。我不喜欢这两种格式。他们俩似乎都完成了一半。对象序列化解决了更多的问题。
为什么我们要忘记安全方面?通过网络传输数据时,XML 更安全,因为我们可以准备 XML 信封并发出 SOAP 请求。