使用List和Map动态构建JSON 你会怎样构建JSON呢,尤其是在返回一个对象的几个属性而不是返回整个对象的时候?直接写字符串?使用Builder?两者都不是我的最爱。
随着使用Grails时间的增长,我找到了我自己的方法。只需两步:
- 将数据填充到List或Map中;
- 然后使用Grails的“as JSON”;
以下代码的例子来自我发布的GroovyLive!程序:
def toc= TutorialRepository.toc
int i=1
int j=1
def tocJson=[]
toc.each{ ch ->
def chJson= [:]
chJson['title']= ch.title
chJson['sections']= []
ch.sections.each{ se ->
def seJson= [:]
seJson['title']= se.title
seJson['pos']= "${i}:${j}"
chJson['sections'] << seJson
j++
}
tocJson << chJson
i++
j= 1
}
render tocJson as JSON
很简单,对吧。这种方法还有几个额外的优点:
- 代码更干净;
- 你可以构建更具表现力的JSON;
- 更直观,因为List(或Map)的结构就是最终JSON的结构。

这个用collect就可以了吧?
这个用collect就可以了吧?
愿闻其详。
愿闻其详,请给出例子;)
附注:如果你是指each换成collect,我个人觉得还不如用each来得清晰,但这个不是本文的重点。