Necesito agregar una lista a un objeto de mapa en groovy. Sin embargo, falla cuando ejecuto esta declaración docList.add (Doc). Si creo una clase y agrego el objeto de clase a una lista, funciona, pero JsonBuilder se equivoca con el orden de los campos cuando uso objetos de clase, así que estoy tratando de usar una lista de mapas en su lugar. ¿Algunas ideas?

Map Doc = [
    docName : "",
    docType : ""
];

Map Name = [
    firstName : "",
    lastName : "",
    middleName : "",
    documents : docList
];

Map<String,Object> docList = []
Doc.docName= "test"
Doc.docType= "docx"
docList.add(Doc);

println new JsonBuilder(Name).toPrettyString();

Espero crear el siguiente documento JSON:

{
    "firstName" : "",
    "lastName" : "",
    "middleName" : "",
    "documents": [
        {
            "docName" : "test"
            "docType" : "docx"
        }
    ]
}
0
user7071176 15 oct. 2018 a las 23:37

2 respuestas

La mejor respuesta

Tu código arroja

Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[]' with class 'java.util.ArrayList' to class 'java.util.Map' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.util.Map()

Porque ha asignado una lista vacía a un mapa en esta línea:

Map<String,Object> docList = []

Reemplácelo con List y reorganice el código (de modo que docList se inicialice antes de name) y funcionará:

import groovy.json.JsonBuilder

Map doc = [
        docName: "",
        docType: ""
]

List docList = []
doc.docName = "test"
doc.docType = "docx"
docList.add(doc)

Map name = [
        firstName : "",
        lastName  : "",
        middleName: "",
        documents : docList
]

println new JsonBuilder(name).toPrettyString()

Salida:

{
    "firstName": "",
    "lastName": "",
    "middleName": "",
    "documents": [
        {
            "docName": "test",
            "docType": "docx"
        }
    ]
}
0
Szymon Stepniak 15 oct. 2018 a las 20:43

Su doclista es Map y lo está tratando como un List

List docList = []

Doc.docName= "test"
Doc.docType= "docx"
docList.add(Doc);

Deberia trabajar

0
Amit Phaltankar 15 oct. 2018 a las 20:44