网站首页 > 技术文章 正文
Json 和 Xml 的目的是相似的,他们都是将方便理解和易读的方式将复杂数据组织到各种接口和语言中,这种类型的技术当然是不能缺少的,我们通过他们构建数据也能很好的去共享他们,但是尽管他们的目标类似,但是运作方式却是不同的。
在本文中,我们将对 JSON 和 Xml 进行比较,充分了解他们的优缺点,然后深入地研究它们有什么区别和共同点。
XML
XML是可扩展标记语言,在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。。此外,XML 是支持扩展的,开发人员可以自由的创建自描述的标签和语言,这种语言不一定是数据,它允许开发人员存储和组织数据,最终以数据的方式呈现,简单的说,XML就是一种为存储数据而创建的标记行语言。
XML 起源于 SGML(标准通用标记语言),但是它的方式却更加灵活和直接。它以将不同的系统转换为通用系统来促进数据交换为宗旨,为此,XML实施了一组关于语义和自定义标记语言的规范:它为任何应用程序建立了标准和清晰的结构,确保数据完整性和互换性。
尽管如此,XML却不是一种编程语言,因为它本身并不执行算法或计算,也就是说,它并没有自己的一套语法规则和词汇来生成计算机的程序,XML 被开发用于识别、存储和组织数据。此外,由于它可以采用 HTML 功能,因此它在各种系统中都具有优势。
JSON
JSON 代表 JavaScript Object Notation,这也就是说它是 JavaScript 中的主要数据格式。JavaScript 的日益流行也因此导致了更多 JSON 消息的创建。JSON 已经实现了与Javascript的完美集成和配对。另外,尽管是用 JavaScript 编写的,但 JSON 是独立于语言的(就像 XML),这意味着您可以将它与任何编程语言一起使用。
JSON 的第一条消息是在 2001 年发送的,从那时起,这种用于存储和传输数据的数据格式得到了越来越多的采用。实际上,与 XML 类似,JSON 也从 Web 服务器接收数据并将其传输到网页。然而,它需要的编码更少,尺寸更小,从而有助于更快地处理和数据传输。
JSON 与 XML:差异
尽管解决了非常相似的目的,但 JSON 和 XML 之间还是存在一些关键差异。区分两者有助于决定何时选择其中之一,并根据特定需求和目标了解哪个是最佳选择。
首先,如前所述,XML 是一种标记语言,而另一方面,JSON 是一种数据格式。使用 JSON 的最大优势之一是文件更小;因此,传输数据比 XML 快。此外,由于 JSON 紧凑且易于阅读,文件看起来更干净、更有条理,没有空标签和数据。其结构的简单性和最少的语法使 JSON 更容易被人类使用和阅读。相反,由于标签结构使文件更大更难阅读,XML 通常以其复杂性和老式标准为特征。
然而,JSON 与 XML 并不完全是一个公平的比较。JSON 通常被错误地认为是 XML 的替代品,但虽然 JSON 是进行简单数据传输的绝佳选择,但它不执行任何处理或计算。XML 可能是“古老的”和复杂的,但它的复杂性使这种语言不仅可以传输数据,还可以处理和格式化对象和文档。
与 JSON 不同,XML 中的文档通常是自描述的。通常,XML 文档在标题上有一个指向其模式的链接(模式也用 XML 编写并在 W3C 的 XML 规范中定义)。因为文档的模式描述了文档上可以或不可以包含的内容,所以它有两个优点:
- 在编写 XML 文档时,作者知道需要哪些字段。例如,假设作者正在编写一个 XML 记录名称 car,由架构 car.xsd 定义。然后,他/她已经知道需要有哪些标签(型号、许可证、品牌等)。
- 可以根据模式验证文档。换句话说,加载文档的应用程序可以检查它是否正确,而不会丢失标签或其他错误。
还支持 JSON 模式,这意味着您可以使用相关数据格式执行与 XML 相同的操作。但是,它并没有内置到技术中。因此,需要扩展以支持 JSON 模式。
使用 XML 的另一个巨大优势是它可以处理注释、元数据和名称空间。此功能使开发人员可以更轻松地跟踪正在发生的事情并与其他团队成员共享文档。此外,XML 支持各种数据类型(例如图像和图表),这与 JSON 不同,后者仅支持字符串、对象、数字和布尔数组。
关于安全性,在使用 XML 时,默认启用 DTD(文档类型定义)验证和外部实体扩展,从而使结构能够应对某些攻击。禁用这些可以使 XML 结构更安全。另一方面,使用 JSON 通常在任何时候都是安全的,尽管使用 JSONP(带填充的 JSON)可能会更危险,因为它可能导致 CSRF(跨站点请求伪造)攻击。
数据在 XML 中的存储方式也不同于 JSON。虽然标记语言以树结构存储数据,但相反,JSON 像映射一样存储数据,其中包含键值对。此外,JSON 不使用结束标记并且可以使用数组(具有元素组的数据结构)。
尽管 JSON 和 XML 之间存在许多差异,但它们的主要区别在于数据解析。如前所述,JSON 可以通过常规 J?avaScript 函数轻松解析,因为它已经集成。XML 不会发生同样的情况,它必须使用 XML 解析器进行解析,因此更加困难和缓慢。尽管如此,一些语言,如 Java,将 XML 解析器作为其标准库的一部分。
JSON 与 XML:相似之处
尽管 JSON 和 XML 彼此有很大不同,但它们经常出于某种原因进行比较。首先,如前所述,它们的用途非常相似,即存储和传输数据。其次,它们都使用人类可读的文本来完成,使其更易于工作和解释。
此外,使用 XML 或 JSON 的一大优势是它们都可以通过 XHR (XMLHttpRequest) 获取。XHR 是一种可用于 JavaScript、PHP、Python、Ruby 等脚本语言的 API,其对象允许从 Web 服务器请求数据。此外,XML 和 JSON 都可以解析并与大多数编程语言兼容。
最后,尽管在结构和语义方面存在差异,但 JSON 和 XML 都遵循值中值的分层顺序。
正如我们所观察到的,它们的差异比它们的共同点更显着。因此,最终的问题是:如果 JSON 和 XML 具有相似的用途,但又如此与众不同,那么哪个更好?
JSON 与 XML:哪个更好?
说实话,这个问题的答案并没有那么简单。XML 在创建之初就迎来了它的黄金时代。它为通用语言的数据交换做出了巨大贡献,改变了计算世界。时至今日,尽管 XML 通常被认为是“过时的”,但 XML 具有令人钦佩的特性,这些特性超越了快速处理和数据传输,因此比 JSON 更复杂。
因此,如前所述,JSON 与 XML 并不是一个公平的比较。一件事是根据开发人员的目标来比较这两种技术,同时考虑它们的用途。在这种情况下,JSON 更快且更易于使用。但是,另一件事是考虑每种技术提供的功能来比较它们。在这方面,尽管 XML 速度更慢且更复杂,但它也提供了迄今为止 JSON 尚未开发的附加功能。
技术从未停止发展,随着 JavaScript 成为最流行的编程语言之一,JSON 也开始越来越受到关注。此外,一旦 JSON 更简单、更易于使用,并且具有整体出色的性能和良好的速度,开发人员很快就开始使用它。
总而言之,要执行不需要太多验证和语法问题的数据交换,JSON 很可能是最佳选择。然而,JSON 的存在并没有放弃学习 XML 的重要性,因为它的复杂性和特性可以超越快速的数据传输和处理。
结论
JSON 和 XML 用于操作系统的编程语言,允许共享数据。尽管 XML 较旧,但这种标记语言能够定义一组规则和结构,使数据交换具有通用性,并进一步生成人类和计算机可读的文档。
另一方面,JSON 是一种数据格式,是一种与 XML 具有相同目的的更现代的方法。但是,由于它生成的文件更轻、速度更快,因此它更适合浏览器和服务器之间的数据传输。相比之下,XML 以其数据结构方式脱颖而出。
正如我们所观察到的,JSON 和 XML 在各个方面都不同,从适用性到编码表示、数据结构,甚至安全性。在同等权衡 XML 和 JSON 之后,人们得出结论,JSON 是实现数据结构化和交换机制的最快、最简单的方法。在这方面,JSON 的性能超过了 XML。然而,XML 在数据存储中一直扮演着重要的角色,它的文档格式仍然被开发人员广泛使用,并在许多工具中被设置为默认格式。
猜你喜欢
- 2024-11-11 php+json+mysql实现前后端分离(php vue前后端分离)
- 2024-11-11 PHP中json解析失败原因, json_decode返回null解析失败原因
- 2024-11-11 如何使php的数组传递到js中(如何使php的数组传递到js中)
- 2024-11-11 Python操作JSON格式数据的技巧(python解析json数据)
- 2024-11-11 Linux(centos)用yum方式安装php最新版
- 2024-11-11 PHP 8.3 正式发布!(php8.0新功能)
- 2024-11-11 使用json_encode打印中文字符并且格式化(php代码)
- 2024-11-11 PhpStorm 2022.2 已发布(phpstorm2018)
- 2024-11-11 你不知道的PHP 8.3版本和它的一些有趣的变化
- 2024-11-11 通过WordPress HTTP API 获取json内容并解析
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)