【发布时间】:2010-09-24 09:59:01
【问题描述】:
我的要求只是显示一组从数据库中检索到的值。我正在使用 jquery。
【问题讨论】:
标签: javascript jquery xml json
我的要求只是显示一组从数据库中检索到的值。我正在使用 jquery。
【问题讨论】:
标签: javascript jquery xml json
当其中任何一个为真时,优先使用 XML 而非 JSON:
当所有这些都为真时,优先使用 JSON 而不是 XML:
【讨论】:
除非需要使用 XML,否则我会使用 JSON。它更容易理解,并且(因为它需要较少的配置开销)如果库在您的上下文中可用,则更容易进行读写编程,而且它们现在非常普遍。
当亚马逊首次将他们的目录公开为一种网络服务时,他们同时提供了 JSON 和 XML。大约 90% 的实施者选择了 JSON。
【讨论】:
考虑到您已经在客户端执行 javascript 的特定情况,出于以下原因,我会使用 JSON:
因为 JSON 是 JavaScript 原生的
你必须在上面写更少的代码
客户端 - 只是 eval()(或者,更好的是,JSON.parse())JSON
字符串并得到一个你可以的对象
使用。
同时评估 JSON 客户端会更多 高效,因此更快。
JSON 序列化产生更短的 字符串比 XML。使用 JSON 将 减少运行的数据量 跨越电线并改善 在这方面的表现。
这里有一些进一步的阅读:http://www.subbu.org/blog/2006/08/json-vs-xml
【讨论】:
eval()ing JSON 不是一个大禁忌吗?
我在 XML vs JSON relm 中遇到的其他一些事情:
JSON 非常适合
这意味着它倾向于喜欢数组或嵌套数组。但是 JSON 两者都缺失
因此,如果您要组合两个或多个 JSON 服务,则可能存在潜在的命名空间冲突。话虽如此,根据我的经验,在交换数据时,JSON 可以用于大约 90% 的相同事情。
【讨论】:
通常 JSON 更紧凑,解析速度更快。
如果满足以下条件,则首选 XML:
(几乎)XML 的一个重要案例:尝试检测何时发送 HTML sn-ps 比发送原始数据更有益。 AHAH 可以在简单的应用程序中创造奇迹,但经常被忽视。通常这种风格假定服务器发送 HTML sn-ps 将被内联到网页中而不进行处理。
通常在 AHAH 情况下,CSS 被最大限度地利用来直观地按摩 sn-ps 并实现简单的条件,例如使用特定于用户或特定于应用程序的设置隐藏/显示 sn-p 的相关部分。
【讨论】:
在客户端浏览器解析数据时必须执行的处理方面,JSON 总是更可取的。此外,JSON 是一种轻量级的数据交换格式。
XML 解析总是消耗大量浏览器资源,除非另有要求,否则应尽可能避免。
【讨论】:
JSON 解析起来既简单又快捷。 XML 更难解析,解析和传输也更慢(在大多数情况下)。
由于您使用的是 jQuery,我建议使用 JSON:jQuery 可以检索 JSON 数据并自动将其转换为 Javascript 对象。其实你可以convert JSON data into a Javascript object using eval。 XML 必须由您手动横向处理(我不知道这在 Javascript 中是如何工作的,但在我使用 XML 库的大多数语言中,这很困难/更烦人)。
【讨论】:
我有一篇关于该主题的博文,详细介绍了 Web 协议(即 SOAP、XML、JSON、REST、POX 等)的历史,提供了摘要以及每种协议的一些优缺点:http://www.servicestack.net/mythz_blog/?p=154
我实际上认为,通过比较动态 (JSON) 和静态 (XML) 语言之间的差异,您可以得出 XML 和 JSON 之间的许多相似之处。
基本上,XML 是一种更严格、更严格的序列化格式,可以选择使用随附的模式(它是 XSD 或 DTD)进行验证。 XSD 非常精细,允许您描述许多不同的类型,例如日期、时间、枚举、用户定义类型甚至类型继承等。SOAP 有效地构建在 XML 功能集之上,提供了一种通过 WSDL 描述 Web 服务(例如类型和操作)的标准化方式。 WSDL 规范的冗长和复杂意味着使用它进行开发可能会更加乏味,但同时有更多可用的工具可供您使用,并且大多数现代语言都提供了自动化工具来生成您的客户端代理,从而减轻了一些负担尝试与外部服务互操作时关闭。 (虽然同时我发现在处理频繁变化的网络服务时,生成的代理本身是一种负担)。
如果您有一个定义明确且不会经常更改的“企业服务”,或者您的 Web 服务需要从多种不同的语言访问,我仍然建议您将 XML 用于您的 Web 服务。
尽管 XML 有其所有优点,但也有缺点。它依赖命名空间来提供类型化的可扩展格式,并使您能够在同一文档中指定属性和元素。 在一个文档中拥有不同的命名空间意味着在很多时候使用 Xml 解析器来提取数据时,您还需要提供要检索/遍历的每个元素的命名空间。它还推断有效负载,使其比需要的更详细。 可以选择输出属性和元素意味着您的类不能很好地映射到 XML 文档。仅这些功能就使其不适用于大多数语言的编程,使其使用起来更加乏味和麻烦。 Microsoft 已经在他们的 DataContract 序列化程序中认识到并简化了这一点,取消了 XML 属性,只将类的属性映射到 Xml 元素。
另一方面,JSON 在许多方面与 XML 完全相反,因为它的类型非常松散,并且仅对基本类型有简单的支持:数字、布尔值、字符串、对象和数组。其他一切本质上都必须放在一个字符串中。这在尝试跨语言边界进行通信时并不是很好,因为如果您想支持更具体的类型,您将需要遵守一些带外非标准规范。从好的方面来说,它有限的功能集可以很好地适应大多数语言 - 并且非常适合 JavaScript,因为 JSON 字符串可以直接eval'ed 到 JavaScript 对象中。
尺寸和性能
我有一些northwind database benchmarks available 比较 Microsoft 的 XML 和 JSON 实现之间的大小和速度。基本上 XML 的大小是 JSON 的 2 倍以上,但与此同时,微软似乎在优化他们的 XML DataContractSerializer 方面付出了很多努力 它比他们的 JSON 快 30% 以上。看来您必须在尺寸和性能之间进行权衡。对此事实不满意,我决定编写自己的快速JsonSerializer,它现在比 MS 的 XML 快 2.6 倍 - 两全其美:)。
【讨论】:
如果我需要验证传入的数据块,我会选择 XML 而不是 JSON,因为 XML 通过 XSD 原生支持这一点。
【讨论】:
当你走 JSON 路线时,你 遇到与 XML 相同的问题 10年前面对:
混合来自两个不同来源的数据 成一个 JSON 数据包可能导致元素 标签相互碰撞。混合 装箱单和发票,以及 突然,发件人地址可能意味着 完全不同的东西。这就是为什么 XML 有命名空间。
不同JSON之间的转换 结构需要写作 平凡的代码。更具声明性的方式 映射数据将使工作更容易。 这就是 XML 具有 XSLT 的原因。
描述一个 JSON 数据包的 结构——它的字段、数据类型、 等等——对于人们来说是必要的 连接到您的服务。它的 拥有元数据语言必不可少 为了这。这就是 XML 具有 Schemas 的原因。
同时进行两个 客户端-服务器对话需要 关心。如果你问服务器两个 问题并得到一个答案,如何 你知道它回答了什么问题吗? 这就是 XML 具有 WS-Correlation 的原因。
【讨论】:
JSON 是 javascript 的原生编码。它应该更快更容易使用。
【讨论】:
从http://json.org/xml.html的第一行开始
可扩展标记语言 (XML) 是一种源自标准通用标记语言 (SGML) 的文本格式。与 SGML 相比,XML 简单。相比之下,超文本标记语言 (HTML) 更加简单。即便如此,一本好的 HTML 参考书也只有一英寸厚。这是因为文档的格式化和结构化是一项复杂的业务。 . . .
显然 JSON 更快,但更清楚的是它难以阅读。 使用 JSON 以提高速度,如果需要人工交互,则使用 XML,您可以牺牲速度。
【讨论】:
我将 JSON 用于任何类型的配置、数据交换或消息传递。仅当出于其他原因或在语义上标记类似文档的数据时,我才使用 XML。
【讨论】:
Microsoft 支持 XML 和 JSON。 XML 文字是 VB 9 中新的很酷的特性。在即将发布的 ASP.NET 4.0 版本中,必须使用 JSON 来利用客户端模板的强大功能。
从您提出的问题看来,JSON 可能是您的选择,因为它很容易在客户端使用或不使用 jQuery 进行处理。
【讨论】:
使用 JSON
使用 XML
【讨论】:
我发现this article at digital bazaar 真的很有趣。
下面引用了文章的部分内容。
关于 JSON 专家:
如果你想要传递的只是原子值或列表或散列 原子值,JSON 具有 XML 的许多优点: 可直接在 Internet 上使用,支持多种 应用程序,很容易编写程序来处理 JSON,它很少 可选功能,易于阅读且相当清晰,其设计 形式简洁,JSON 文档易于创建,并且它使用 统一码。 ...
关于 XML 专家:
XML 非常好地处理了丰富的非结构化 数据。即使 XML 死了,我也不担心 XML 的未来 受到一群 Web API 设计师的欢欣鼓舞。
而且我忍不住吐了一句“我告诉过你!”令牌在我的 桌子。我期待看到 JSON 人员在他们的时候会做什么 要求开发更丰富的 API。当他们想换得不好的时候 结构化数据,他们会将其硬塞到 JSON 中吗?我偶尔看到 提到 JSON 的模式语言,其他语言会跟随吗? ...
【讨论】:
快速规则:
说明:
JSON 的唯一作用是使用大多数编程语言常见的数据类型来序列化面向对象的数据:lists、hashes 和 scalars ,为此目的,它确实无法被击败或改进。也就是说,“JSON 没有版本号 [as] 预计不会对 JSON 语法进行修订”。 - Douglas Crockford(不能把它作为你完美工作的标志)
XML 曾经作为数据交换格式出售,但请考虑两个最常见的用例:异步客户端-服务器通信 (AJAX) - JSON 几乎完全取代了 XML(X确实应该是 J),以及 Web 服务:JSON 使 XML 成为一种多余的替代方案。
XML 被广泛使用的另一件事是用于程序的人类可写/可读(?)数据文件,但在这里你也有一个更简洁、更程序友好、更人性化的 YAML 格式,一个 JSON 超集。
因此,在数据表示方面,JSON 全面胜过 XML。那么,XML 还剩下什么?混合内容文档表示,这就是它was intended for。
【讨论】:
大多数较新的 Web 技术都使用 JSON,因此绝对是使用 JSON 的一个很好的理由。一个很大的优势是,在 XML 中,您可以用多种不同的方式表示相同的信息,而在 JSON 中则更直接。
JSON 恕我直言也比 XML 更清晰,这对我来说是一个明显的优势。如果您正在使用 .NET,那么 Json.NET 无疑是帮助您使用 JSON 的赢家。
【讨论】:
我在这里看到了一些偏见教条。似乎对于 xml 和仅来自 Web 开发的上下文(这对问题有意义)而言,对此的答案过于简化,所以我认为 id 提供了一些额外的见解,以防万一有人越过这个问题并需要数据的答案其他上下文中的序列化。
以下是硬性规定:
XML 毫无疑问更强大。因此,当您的数据模型复杂到需要以下功能时,请使用它:
JSON 更易于学习、理解和使用。因此,当您没有时间学习 XML 并且不需要上述任何功能时,请使用它。如果这对您的用例很重要的话,它在电线上的重量也更轻。
TL:DR, XML 可以做 json 可以做的所有事情,但更重。反过来是不正确的。是的,Json 更简单,因此使用得更多,但这并不意味着它可以取代 XML。就我今年 2020 年的情况而言,json 没有为我们的用例做好准备,我们确实需要 XML。如果需要,我可以多谈。干杯,祝你好运。
【讨论】: