JSON与XML数据交换格式的辩论
在2006年的XML会议上,JSON的发明者、雅虎架构师Douglas Crockford发表了题为《JSON,XML的无脂替代品》的演讲,引发了关于JSON与XML作为数据交换格式的辩论。JSON是一种设计目标为文本化、最小化且为JavaScript子集的数据交换格式,支持对象(无序的键值对集合)和数组(有序的值序列)两种结构,以及字符串、数字、布尔值和null四种简单类型。
JSON的优势
Douglas Crockford提出了JSON作为数据交换格式的多个优势:
- 人类和机器可读:JSON格式同时适合人类阅读和机器解析。
- Unicode支持:允许传输几乎任何人类语言的信息。
- 自描述性:JSON格式描述了结构和字段名称以及具体值。
- 严格的语法和解析要求:使得解析算法简单、高效且一致。
- 通用数据结构表示:能够表示记录、列表和树等最通用的计算机科学数据结构。
对JSON常见批评的回应
Douglas还反驳了针对JSON的常见批评:
- JSON没有命名空间:每个对象都是独立的命名空间,键集独立于其他对象,使用上下文避免歧义。
- JSON没有验证器:每个应用程序应负责验证其输入,无法委托给其他工具,但可以使用YAML验证器。
- JSON不可扩展:JSON本身是灵活的,可以表示任何非递归数据结构,且无需扩展即可添加新字段。
- JSON不是XML:JSON比XML简单得多。
其他观点
微软XML标准项目经理Mike Champion总结了Douglas演讲的要点:
- JSON与XML的不同:JSON没有版本号,采用“宽进严出”的哲学,支持超集如YAML。
- JSONRequest API:JSON社区推动基础设施供应商支持JSONRequest API,以解决AJAX环境中XmlHttpRequest的局限性。
Mike认为JSON适合浏览器与服务器通信,但在互操作性方面不如XML。他质疑JSON是否会替代XML在SOAP消息、RSS订阅等场景中的应用,并指出JSON的局限性在新技术场景中会显现。
辩论的进一步讨论
Dave Winer认为JSON解决了XML-RPC在1998年已经解决的问题,并指出JSON示例的复杂性。Douglas Crockford回应称“重新发明轮子的好处是可以得到一个更圆的轮子”。
Mike Champion总结了讨论中的关键点:
- JSON粉丝多于XML粉丝:讨论中支持JSON的人更多。
- 解析速度:JSON在当今浏览器中可能比XML快100倍。
- 类型化对象:JSON解析结果类似于类型化的“业务对象”,而XML需要额外的模式和数据绑定工具。
- JSON的优雅:JSON简单干净,不涉及XML的复杂性如元数据、注释、处理指令、模式语言和命名空间。
Mike认为XML虽然不如JSON优雅,但更稳健和灵活。JSON的局限性在新场景中会显现,历史上有更优雅的技术输给更广泛采用的重型技术。
其他专家观点
Simon Wilson认为JSON的甜点在于序列化简单数据结构以在编程语言之间传输。如果需要更复杂的数据结构,应使用XML。
XML共同发明者Tim Bray指出,JSON用于“在网络上传输结构体”,而XML适用于处理大量数据、加载到不同的内存数据结构、全文索引、人类可读等场景。
Uche Ogbuji认为XML和JSON各有其使用场景,XML更适合文档和文本,而JSON更适合记录和数据。
其他讨论
Sam Ruby和Robert Sayre分别从网络传输字节和嵌入XML/HTML内容的角度分析了JSON的优势。Uche Ogbuji认为XML在数据和文档方面的努力使其比前身更有用,但JSON在数据方面更为适合。
最后,Douglas Crockford还发明了一种新的键盘布局,增添了讨论的趣味性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。