2012-03-29 9 views
15

Ho bisogno di creare un messaggio JSON come questo:come usare jsonbuilder con le collezioni?

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

Ho provato questo

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

ma non funziona. Qualcuno può mostrarmi come farlo funzionare?

risposta

32

io consiglierei di trasformare l'elenco delle attività in una lista di forma [[id: 1], [id: 2], [id: 3]] e poi "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() 

Io di solito preferisco generare le strutture di dati in Groovy prima (ad esempio le liste, mappe) e quindi convertirli in JSON, in questo modo di solito ho più controllo sui dati che verranno serializzati e non è necessario includere la logica nel codice di serializzazione.

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

hey qual è quella sintassi groovy: 'json {...}'? parentesi graffa subito dopo il nome della variabile? nuovo per groovy ... – Mahesha999

+1

@ Mahesha999 l'oggetto 'json' è di un tipo che può essere chiamato. Fare 'json {...}' è lo stesso di 'json ({...})', che chiama l'oggetto 'json' con un blocco di codice come parametro. – epidemian

+0

Mi manca qualcosa di fondamentale da groovy. Cosa significa "tipo che può essere chiamato"? Solitamente chiamiamo metodi in Java e non il tipo istanza/oggetto/variabile direttamente. – Mahesha999

Problemi correlati