快速业务通道

精通Grails: 用JSON和Ajax实现异步Grails - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
;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。

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

时间:2011-08-02 IBM Scott Davis

在 Grails 控制器中呈现 JSON

在 “使用 Ajax 实现多对多关系” 中,您首先从一个 Grails 控制器返回 JSON。清单 4 中的闭包 类似于您当时创建的闭包。不同之处在于,这个闭包是通过一个友好的 Uniform Resource Identifier( URI)访问的,这已在 “RESTful Grails” 中讨论。它还使用您在 “测试 Grails 应用程序” 中首次 见到的 Elvis 操作符。

将一个名为 iata 的闭包添加到您在 “Grails 与遗留数据库” 中创建的 grails- app/controllers/AirportMappingController.groovy 类中,记得在文件顶部导入 grails.converters 包,如清单 4 所示:

清单 4. 将 Groovy 对象转换成 JSON

import grails.converters.*class AirportMappingController {    def iata = {  

    def iata = params.id?.toUpperCase() ?: "NO IATA"      def airport = 

AirportMapping.findByIata(iata)      if(!airport){        airport = new 

AirportMapping(iata:iata, name:"Not found")      }      render airport as 

JSON    }}

在浏览器中输入 http://localhost:9090/trip/airportMapping/iata/den 进行测试。应该可以看到 清单 5 中所示的 JSON 结果:

清单 5. JSON 中的一个有效的 AirportMapping 对象

{"id":328, "class":"AirportMapping", "iata":"DEN", "lat":"39.858409881591797", "lng":"-104.666999816894531", "name":"Denver International", "state":"CO"}

也可以输入 http://localhost:9090/trip/airportMapping/iata 和 http://localhost:9090/trip/airportMapping/iata/foo

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号