2010-04-01 12 views
6

Estoy intentando construir JSON desde dos campos. Diga, tengo una lista de objetos (parte), y solo necesito pasar 2 elementos como par JSON.representando JSON en GRAILS con parte de los atributos de un objeto

def list = getMyList() //it contains 2 party objects 
partyTo = array { 
    for (i in list) { 
     x partyId: i.id 
     y partyName: i.toString()   
    } 
} 

La cadena JSON es

{ 
    "partyTo": [ 
     {"partyId":12}, 
     {"partyName":"Ar"}, 
     {"partyId":9}, 
     {"partyName":"Sr"} 
    ] 
} 

cuando extraigo que en el cliente, se trata como 4 objetos. Yo quería como 2 objetos, con el siguiente formato.

{ 
    "partyTo": [ 
     {"partyId":12, "partyName":"Ar"}, 
     {"partyId":9 , "partyName":"Sr"} 
    ] 
} 

Obtengo 4 objetos, probablemente porque utilizo una matriz para compilar JSON. Soy nuevo en groovy y JSON, por lo que no estoy seguro acerca de las combinaciones de sintaxis correctas. Cualquier ayuda muy apreciada. gracias.

Respuesta

8

Tiene razón en que el problema es con la construcción de su matriz. Para obtener la salida requerida que necesita una serie de mapas, un mapa para cada objeto, y para obtener el objeto global "partyTo" es necesario agregar esa lista a otro mapa:

def parties = [ 
      ["id":12 , "name":"Ar", "privateField": "a"], 
      ["id":9 , "name":"Sr", "privateField": "b"] 
    ] 

    def toRender = parties.collect { party-> 
     ["partyId": party.id, "partyName":party.name] 
    } 

    def result = ["partyTo" : toRender] 
    render result as JSON 

En otras palabras, un Griales el mapa se convierte en un objeto JSON y las matrices y listas Grails se vuelven matrices en JSON

Si siempre desea representar sus objetos "de grupo" como este, puede considerar el uso de ObjectMarshaller. Más detalles en este post en rendering JSON using object marshallers

+0

gracias por su ayuda .. De hecho, encontré la misma publicación sobre el ObjectMarshaller, y funcionó muy bien. Todavía tenía curiosidad sobre la solución anterior. muchas gracias. Atentamente. – bsr

Cuestiones relacionadas