JSON 作为一种更轻、更友好的 Web services客户端的格式(多采用浏览器的形式或访问 REST风格 Web服务的Ajax应用程序的形式)引起了 Web 服务供应商的注意。
XML的十字路口: 浏览器和 Ajax
XML设计原理已经发布了将近十年。时至今日,这种标记语言已经在广阔的软件应用领域中占据了主导地位。从Java、.NET等主流平台中的配置和部署描述符到应用集成场景中更复杂的应用,XML与生俱来的语言无关性使之在软件架构师心目中占据着独特的地位。但即便最著名的XML权威也不得不承认:在某些环境中,XML的使用已经超出了它自身能力的极限。
围绕Ajax原理构建的那些Web应用程序最能说明XML的生存能力,从这一点来看,一种新的有效负载格式的发展壮大也得益于XML。这种新的有效负载格式就是JavaScript Object Notation (JSON)。在探索这种新的标记语言的复杂性之前,首先来分析一下在这种独特的设计形式中,XML具有哪些局限性。
Ajax建立了一个用于从远程Web services发送和接收数据的独立信道,从而允许Web程序执行信道外(out-of-band)客户端/服务器调用。通俗地说,Ajax程序中的更新和导航序列在典型的客户端/服务器环境之外完成,在后台(即信道外)接受到信息后,必须进行一次完整的屏幕刷新。
这些应用程序更新通常是通过REST风格(RESTful)Web services获得的,一旦被用户的浏览器接收到,就需要整合到HTML页面的总体布局之中,这正是XML发挥强大力量的场合。尽管近年来,脚本语言支持和插件支持已使大多数主流浏览器的功能得到了强化,但许多编程任务依然难于开展,其中之一就是操纵或处理文本,这通常是使用DOM实现的。
采用DOM的复杂性源于其基于函数的根,这使得对数据树的简单修改或访问都需要进行无数次方法调用。此外,众所周知,DOM在各种浏览器中的实现细节不尽相同,这一过程将带来极为复杂的编程模式,其跨浏览器兼容性出现问题的可能性极大。接下来的问题显而易见,那就是:如何使一种标记语言轻松集成到HTML页面中以满足Ajax的要求?
问题的答案就是:利用所有主流浏览器中的一种通用组件——JavaScript引擎。XML需要使用DOM之类的机制来访问数据并将数据整合到布局之中,采用这种方法,我们不再使用像XML这样的格式来交付Ajax更新,而是采用一种更为简单直观的方式,采用JavaScript引擎自然匹配的格式——也就是JSON。
既然已经明确了JSON与XML和Ajax之间的关系,下面将进一步探讨JSON背后的技术细节。
JSON剖析:优点和不足
对于JSON,首先要明白JSON和XML一样也是一种简单文本格式。相对于XML,它更加易读、更便于肉眼检查。在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。下图是一个JSON有效负载:
{"addressbook": {"name": "Mary Lebow", "address": { "street": "5 Main Street" "city": "San Diego, CA", "zip": 91912, }, "phoneNumbers": [ "619 332-3452", "664 223-4667" ] } } |