2012-03-29 4 views
15

Ich brauche eine json Meldung wie diese zu erstellen:Wie verwendet man jsonbuilder mit Sammlungen?

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

ich dieses versucht

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

haben, aber es funktioniert nicht. Kann mir jemand zeigen, wie es funktioniert?

Antwort

32

Ich würde empfehlen, die Aufgabenliste in eine Liste der Form [[id: 1], [id: 2], [id: 3]] Transformation und dann „jsonizing“ es:

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

Ich ziehe es in der Regel die Datenstrukturen in Groovy Erzeugen eines ersten (zB Listen, Karten) und dann wandle ich sie in JSON um, auf diese Weise habe ich normalerweise mehr Kontrolle über die Daten, die serialisiert werden sollen, und ich muss keine Logik in den Serialisierungscode einbeziehen.

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 was ist das groovy syntax: 'json {...}'? geschweifte Klammer unmittelbar nach dem Variablennamen? neu zu groovy ... – Mahesha999

+1

@ Mahesha999 das 'json' Objekt ist von einem Typ, der aufgerufen werden kann. Doing 'json {...}' ist dasselbe wie 'json ({...})' ', das das' json'-Objekt mit einem Code-Block als Parameter aufruft. – epidemian

+0

Ich muss etwas Grundlegendes von groovy vermissen. Was heißt "Typ, der angerufen werden kann"? Normalerweise rufen wir Methoden in Java nicht direkt vom Typ instance/object/variable auf. – Mahesha999

Verwandte Themen