Как использовать jsonbuilder с коллекциями?

Мне нужно создать 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

Я бы рекомендовал преобразовать список задач в список формы [[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()