技术开发 频道

精通 Grails: 用 JSON 和 Ajax 实现异步 Grails

  JSON 的优点

  在 Web 开发方面,JSON 与 XML 相比主要有两个优点。首先,它更加简洁。JSON 对象是一系列以逗号分隔的 name:value 对,最外面有一对花括号。相反,XML 则使用重复的开始和结束标记包装数据值。因此,与相应的 JSON 相比,这样便产生了两倍的元数据开销,所以 Crockford 将 JSON 趣称为 “XML 的无脂替代品”(请参阅 参考资料)。当处理 Web 开发的 “细管道” 时,每次减少一些字节都可以带来实在的性能好处。

  清单 1 显示了 JSON 和 XML 如何组织相同的信息:

  清单 1. 比较 JSON 和 XML

{"city":"Denver", "state":"CO", "country":"US"}

<result>
  
<city>Denver</city>
  
<state>CO</state>
  
<country>US</country>
</result>

  对于 Groovy 程序员来说,JSON 对象看上去应该更熟悉:如果将花括号换成方括号的话,在 Groovy 中就是定义一个 HashMap。说起方括号,定义 JSON 对象数组的方式与定义 Groovy 对象的方式是完全一样的。一个 JSON 数组就是一个以逗号分隔的系列,外面以方括号包围,如清单 2 所示:

  清单 2. 一个 JSON 对象列表

[{"city":"Denver", "state":"CO", "country":"US"},
{
"city":"Chicago", "state":"IL", "country":"US"}]

  当解析和处理 JSON 时,就突出了 JSON 的第二个优点。将 JSON 装载到内存只需一个 eval() 调用。装载后,就可以通过名称直接访问任何字段,如清单 3 所示:

  清单 3. 装载 JSON 和调用字段

var json = '{"city":"Denver", state:"CO", country:"US"}'
var result = eval( '(' + json + ')' )
alert(result.city)

  Groovy 的 XmlSlurper 也允许直接访问 XML 元素。(您已经在 “Grails 服务和 Google 地图” 中使用过 XmlSlurper)。如果现代 Web 浏览器支持客户端 Groovy,我就不会对 JSON 这么感兴趣。不幸的是,Groovy 完全是一个服务器端解决方案。就客户机-服务器开发而言,JavaScript 是唯一选项。所以我选择在服务器端使用 Groovy 处理 XML,而在客户端则使用 JavaScript 处理 JSON。在这两种情况下,我都可以最轻松地得到数据。

  至此,您已粗略地了解了 JSON,接下来可以通过 Grails 应用程序生成 JSON。

0
相关文章