2012-03-29 8 views
15

muszę utworzyć wiadomość json tak:Jak korzystać z jsonbuilder z kolekcjami?

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

Próbowałem to

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()) 

ale to nie działa. Czy ktoś może mi pokazać, jak to działa?

Odpowiedz

32

Polecam przekształcając listę zadań do listy postaci [[id: 1], [id: 2], [id: 3]], a następnie „jsonizing” go:

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() 

I zazwyczaj wolą generowania struktur danych w Groovy pierwszy (np listy, mapy) i następnie konwertuj je do JSON, w ten sposób zwykle mam większą kontrolę nad danymi, które będą serializowane i nie muszę dołączać logiki do kodu serializacji.

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() 
+1

Hej, co to za fajna składnia: 'json {...}'? nawias klamrowy natychmiast po nazwie zmiennej? nowy na groovy ... – Mahesha999

+1

@ Mahesha999 Obiekt 'json' jest typu, który można wywołać. Wykonanie 'json {...}' jest takie samo jak 'json ({...})', które wywołuje obiekt 'json' z blokiem kodu jako parametrem. – epidemian

+0

Muszę zabraknąć czegoś podstawowego z groovy. Co to znaczy "typ, który można nazwać"? Zwykle wywołujemy metody w Javie, a nie bezpośrednio typ instancji/obiektu/zmiennej. – Mahesha999