如何使用jsonbuilder与集合?

时间:2012-03-29 16:48:18

标签: groovy

我需要创建一个这样的json消息:

{
  success:true,
  count:3,
  data: [
    {id:1},
    {id:2},
    {id:3}
  ]
}

我试过这个

import groovy.json.*

def tasks = [1, 2,3]
def json = new JsonBuilder()

json{
  success(true)
  count(tasks.size())
  data {
    tasks.each {
      data(
        id: it        
      )
    }
  }
}

JsonOutput.prettyPrint(json.toString())

但它不起作用。有人可以告诉我如何让它发挥作用吗?

1 个答案:

答案 0 :(得分:35)

我建议将任务列表转换为[[id: 1], [id: 2], [id: 3]]形式的列表,然后将其“jsonizing”:

import groovy.json.JsonBuilder

def tasks = [1, 2, 3]
def json = new JsonBuilder()

json{
  success(true)
  count(tasks.size())
  data(tasks.collect {[id: it]})
}

println json.toPrettyString()

我通常更喜欢首先在Groovy中生成数据结构(例如列表,映射),然后将它们转换为JSON,这样我通常可以更好地控制要序列化的数据,我不需要包含序列化代码上的逻辑。

import groovy.json.JsonBuilder

def tasks = [1, 2, 3]

def data = [
  success: true,
  count: tasks.size(),
  data: tasks.collect {[id: it]}
]

def json = new JsonBuilder(data)
println json.toPrettyString()