使用List和Map动态构建JSON

使用List和Map动态构建JSON 你会怎样构建JSON呢,尤其是在返回一个对象的几个属性而不是返回整个对象的时候?直接写字符串?使用Builder?两者都不是我的最爱。

随着使用Grails时间的增长,我找到了我自己的方法。只需两步:

  1. 将数据填充到List或Map中;
  2. 然后使用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

很简单,对吧。这种方法还有几个额外的优点:

  1. 代码更干净;
  2. 你可以构建更具表现力的JSON;
  3. 更直观,因为List(或Map)的结构就是最终JSON的结构。

By foxgem - Posted on 19 十二月 2009

这个用collect就可以了吧?

这个用collect就可以了吧?

愿闻其详。

愿闻其详,请给出例子;)

附注:如果你是指each换成collect,我个人觉得还不如用each来得清晰,但这个不是本文的重点。