как использовать jsonbuilder с коллекциями? - PullRequest
16 голосов
/ 29 марта 2012

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

35 голосов
/ 29 марта 2012

Я бы порекомендовал преобразовать список задач в список вида [[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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...