我发现 JSON 比 XML 有一个很大的好处,那就是我不必决定如何格式化数据。正如一些人所展示的,有许多方法可以用 XML 实现即使是简单的数据结构——作为元素、作为属性值等等。然后,您必须对它进行文档记录,编写 XML Schema 或者 RelationNG 或者其他一些废话... ... 这是一团糟。
XML 可能有它的优点,但是对于基本的数据交换,JSON 更加紧凑和直接。作为 Python 开发人员,JSON 和 Python 中的简单数据类型之间没有阻抗不匹配。因此,如果我正在为一个 AJAX 查询编写一个服务器端处理程序,该程序询问某个特定滑雪胜地的雪况,我会建立一个如下的字典:
conditions = {
'new_snow_24': 5.0,
'new_snow_48': 8.5,
'base_depth': 88.0,
'comments': 'Deep and steep!',
'chains_required': True,
}
return simplejson.dumps(conditions) # Encode and dump `conditions` as a JSON string
<conditions>
<new-snow-24>5</new-snow-24>
<new-snow-48>8.5</new-snow-48>
<chains-required>yes</chains-required>
<comments>deep and steep!</comments>
</conditions>
<conditions newSnow24="5" newSnow48="8.5" chainsRequired="yes">
<comments>deep and steep!</comments>
</conditions>
因此,我不仅要考虑要发送给客户端的数据,还要考虑如何对其进行格式化。XML 虽然比普通的 SGML 简单,因为它的规则更加严格,但是仍然提供了太多考虑数据的方法。那我就得开始生成了。我不能仅仅使用一个 Python 字典(或其他简单的数据结构) ,然后说“ go make yourself into my XML”。如果不编写自定义解析器,或者不需要额外的 XML Schema/RelaxNG 开销和其他诸如此类的麻烦,我就无法接收到 XML 文档并立即说“ go make yourself into object and data strucs”。
如果您使用的是浏览器,那么 JSON 序列化/反序列化更快,因为它更简单、更紧凑,而且更重要的是它本身支持。我有一些 可用的 northwind 数据库基准测试比较大小和速度之间的不同序列化可用。在基类库中,微软的 XML 数据合同序列化器比 JSON 序列化器的速度快于 百分之三十序列化器。尽管这与微软投入到他们的 XML 序列化器中的努力有更多的关系,因为我能够开发一个比他们的 XML 序列化器更快的 JsonSerializer。至于基于基准测试的有效载荷,看起来 XML 大约比 JSON 大小的 2倍还要大。但是,如果您的 XML 有效负载在同一文档中使用许多不同的名称空间,这种情况可能会很快消失。
当您必须在大型官僚机构之间设置数据交换标准时,XML 在公司环境中大放异彩。通常,一方比另一方提前几个月开发自己的部分,因此根据约定的 XSD 验证自己的请求确实会受益匪浅。此外,在大公司中,数据传输通常在不同的系统之间进行转换。考虑到 XSLT,这也是 XML 的优势所在。示例: 无代码转换为 JSON: p