Groovy - JSON List Schema

1

I have a problem reading a certain part of an xml file that I am transforming into a JSON file.

First I get this file with class File and play it in my class XmlParser , responsible for parsing my xml file, then I play on JsonBuilder to create my structure JSON .

The problem starts there, if I analyze a normal structure, which is not a list, it goes normal, but when it arrives in a list it joins those 3 in one and it all stays stuck, I tried to put the part of the "father "inside a for with a [i] (counter) soon after so he knows how to differentiate, only that it gives an error of JsonDelegator .

So I put this for only within the attributes of this class and a [i] in the path of the parent class, before the attributes, but it only takes the last one. The class I am referring to is a list softwareHouse

ARCHVIO XML

<?xml version="1.0" encoding="UTF-8"?>
<eSocial xmlns="http://www.esocial.gov.br/schema/evt/evtInfoEmpregador/v02_04_00">
   <evtInfoEmpregador Id="ID1111111111111112017120410223600001">
      <ideEvento>
         <tpAmb>1</tpAmb>
         <procEmi>1</procEmi>
         <verProc>2.3</verProc>
      </ideEvento>
      <ideEmpregador>
         <tpInsc>1</tpInsc>
         <nrInsc>11111111111111</nrInsc>
      </ideEmpregador>
      <infoEmpregador>
         <inclusao>
            <idePeriodo>
               <iniValid>2017-01</iniValid>
               <fimValid>2017-02</fimValid>
            </idePeriodo>
            <infoCadastro>
               <nmRazao>Bruno</nmRazao>
               <classTrib>03</classTrib>
               <natJurid>1015</natJurid>
               <indCoop>1</indCoop>
               <indConstr>1</indConstr>
               <indDesFolha>1</indDesFolha>
               <indOptRegEletron>1</indOptRegEletron>
               <indEntEd>S</indEntEd>
               <indEtt>S</indEtt>
               <nrRegEtt>222222222222222222222222222222</nrRegEtt>
               <dadosIsencao>
                  <ideMinLei>DC - Destrito</ideMinLei>
                  <nrCertif>3333333333333333333333333333333333333333</nrCertif>
                  <dtEmisCertif>2003-03-03</dtEmisCertif>
                  <dtVencCertif>2004-04-04</dtVencCertif>
                  <nrProtRenov>4444444444444444444444444444444444444444</nrProtRenov>
                  <dtProtRenov>2005-05-05</dtProtRenov>
                  <dtDou>2006-06-06</dtDou>
                  <pagDou>55555</pagDou>
               </dadosIsencao>
               <contato>
                  <nmCtt>Raposa</nmCtt>
                  <cpfCtt>66666666666</cpfCtt>
                  <foneFixo>77777777777</foneFixo>
                  <foneCel>88888888888</foneCel>
                  <email>[email protected]</email>
               </contato>
               <infoOP>
                  <nrSiafi>888888</nrSiafi>
                  <infoEFR>
                     <ideEFR>S</ideEFR>
                     <cnpjEFR>99999999999999</cnpjEFR>
                  </infoEFR>
                  <infoEnte>
                     <nmEnte>Elefante</nmEnte>
                     <uf>RO</uf>
                     <codMunic>1100320</codMunic>
                     <indRPPS>S</indRPPS>
                     <subteto>1</subteto>
                     <vrSubteto>111111111111.11</vrSubteto>
                  </infoEnte>
               </infoOP>
               <infoOrgInternacional>
                  <indAcordoIsenMulta>1</indAcordoIsenMulta>
               </infoOrgInternacional>
               <softwareHouse>
                  <cnpjSoftHouse>22222222222222</cnpjSoftHouse>
                  <nmRazao>Gael</nmRazao>
                  <nmCont>Trator</nmCont>
                  <telefone>33333333344</telefone>
                  <email>[email protected]</email>
               </softwareHouse>
               <softwareHouse>
                  <cnpjSoftHouse>33333333333333</cnpjSoftHouse>
                  <nmRazao>Rafa</nmRazao>
                  <nmCont>Terror</nmCont>
                  <telefone>44444444444</telefone>
                  <email>[email protected]</email>
               </softwareHouse>
               <softwareHouse>
                  <cnpjSoftHouse>55555555555555</cnpjSoftHouse>
                  <nmRazao>Leao</nmRazao>
                  <nmCont>Formiga</nmCont>
                  <telefone>66666666666</telefone>
                  <email>[email protected]</email>
               </softwareHouse>
               <infoComplementares>
                  <situacaoPJ>
                     <indSitPJ>1</indSitPJ>
                  </situacaoPJ>
                  <situacaoPF>
                     <indSitPF>2</indSitPF>
                  </situacaoPF>
               </infoComplementares>
            </infoCadastro>
         </inclusao>
      </infoEmpregador>
   </evtInfoEmpregador>
</eSocial>

ARCHIVE.GROOVY

package teste.esocial.groovy

import groovy.json.JsonBuilder
import groovy.json.JsonSlurper

//Pego o arquivo da minha pasta
def inputFile = new File("C:\Users\Bruno\Desktop\ProjetosGroovy\PrimeiroTeste\xmleSocial\s1000.xml")

//XmlParser - Para pegar meu arquivo xml no File e analisar| Coloca .text pois sem ele alega erro
//Não alegaria erro se eu tivesse colocado o xml direto aqui
def parsearXml = new XmlParser().parseText(inputFile.text)

//Variavel que vai montar meu arquivo JSON com base em meu arquivo XML
//Esse JsonBuilder() serve para eu montar meu JSON
def json = new JsonBuilder()

def i
def parada = parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse.size()
println parada

//Aqui estou montando minha estrutura
json.eSocial {
    evtInfoEmpregador {
        ideEvento {
            tpAmb parsearXml.evtInfoEmpregador.ideEvento.tpAmb.text()
            procEmi parsearXml.evtInfoEmpregador.ideEvento.procEmi.text()
            verProc parsearXml.evtInfoEmpregador.ideEvento.verProc.text()
        }
        ideEmpregador {
            tpInsc parsearXml.evtInfoEmpregador.ideEmpregador.tpInsc.text()
            nrInsc parsearXml.evtInfoEmpregador.ideEmpregador.nrInsc.text()
        }
        infoEmpregador {
            inclusao {
                idePeriodo {
                    iniValid parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.idePeriodo.iniValid.text()
                    fimValid parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.idePeriodo.fimValid.text()
                }

                infoCadastro {
                    nmRazao parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.nmRazao.text()
                    classTrib parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.classTrib.text()
                    natJurid parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.natJurid.text()
                    indCoop parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indCoop.text()
                    indConstr parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indConstr.text()
                    indDesFolha parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indDesFolha.text()
                    indOptRegEletron parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indOptRegEletron.text()
                    indEntEd parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indEntEd.text()
                    indEtt parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indEtt.text()
                    nrRegEtt parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.nrRegEtt.text()

                    dadosIsencao {
                        ideMinLei parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.ideMinLei.text()
                        nrCertif parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.nrCertif.text()
                        dtEmisCertif parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.dtEmisCertif.text()
                        dtVencCertif parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.dtVencCertif.text()
                        nrProtRenov parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.nrProtRenov.text()
                        dtProtRenov parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.dtProtRenov.text()
                        dtDou parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.dtDou.text()
                        pagDou parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.pagDou.text()
                    }

                    contato {
                        nmCtt parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.contato.nmCtt.text()
                        cpfCtt parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.contato.cpfCtt.text()
                        foneFixo parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.contato.foneFixo.text()
                        foneCel parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.contato.foneCel.text()
                        email parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.contato.email.text()
                    }

                    infoOP {
                        nrSiafi parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.nrSiafi.text()
                        infoEFR {
                            ideEFR parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEFR.ideEFR.text()
                            cnpjEFR parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEFR.cnpjEFR.text()
                        }

                        infoEnte {
                            nmEnte parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.nmEnte.text()
                            uf parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.uf.text()
                            codMunic parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.codMunic.text()
                            indRPPS parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.indRPPS.text()
                            subteto parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.subteto.text()
                            vrSubteto parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.vrSubteto.text()
                        }
                    }

                    infoOrgInternacional {
                        indAcordoIsenMulta parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOrgInternacional.indAcordoIsenMulta.text()
                    }

                    softwareHouse {
                        for(i = 0; i < parada; i++) {
                            cnpjSoftHouse parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse[i].cnpjSoftHouse.text()
                            nmRazao parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse[i].nmRazao.text()
                            nmCont parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse[i].nmCont.text()
                            telefone parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse[i].telefone.text()
                            email parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse[i].email.text()

                        }
                    }
                }

                infoComplementares {

                    situacaoPJ {
                        indSitPJ parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoComplementares.situacaoPJ.indSitPJ.text()
                    }

                    situacaoPF {
                        indSitPF parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoComplementares.situacaoPF.indSitPF.text()
                    }
                }
            }
        }
    }
}

//Mostra a estrutura JSON
println json.toPrettyString()

EXECUTION

 {
    "eSocial": {
        "evtInfoEmpregador": {
            "ideEvento": {
                "tpAmb": "1",
                "procEmi": "1",
                "verProc": "2.3"
            },
            "ideEmpregador": {
                "tpInsc": "1",
                "nrInsc": "11111111111111"
            },
            "infoEmpregador": {
                "inclusao": {
                    "idePeriodo": {
                        "iniValid": "2017-01",
                        "fimValid": "2017-02"
                    },
                    "infoCadastro": {
                        "nmRazao": "Bruno",
                        "classTrib": "03",
                        "natJurid": "1015",
                        "indCoop": "1",
                        "indConstr": "1",
                        "indDesFolha": "1",
                        "indOptRegEletron": "1",
                        "indEntEd": "S",
                        "indEtt": "S",
                        "nrRegEtt": "222222222222222222222222222222",
                        "dadosIsencao": {
                            "ideMinLei": "DC - Destrito",
                            "nrCertif": "3333333333333333333333333333333333333333",
                            "dtEmisCertif": "2003-03-03",
                            "dtVencCertif": "2004-04-04",
                            "nrProtRenov": "4444444444444444444444444444444444444444",
                            "dtProtRenov": "2005-05-05",
                            "dtDou": "2006-06-06",
                            "pagDou": "55555"
                        },
                        "contato": {
                            "nmCtt": "Raposa",
                            "cpfCtt": "66666666666",
                            "foneFixo": "77777777777",
                            "foneCel": "88888888888",
                            "email": "[email protected]"
                        },
                        "infoOP": {
                            "nrSiafi": "888888",
                            "infoEFR": {
                                "ideEFR": "S",
                                "cnpjEFR": "99999999999999"
                            },
                            "infoEnte": {
                                "nmEnte": "Elefante",
                                "uf": "RO",
                                "codMunic": "1100320",
                                "indRPPS": "S",
                                "subteto": "1",
                                "vrSubteto": "111111111111.11"
                            }
                        },
                        "infoOrgInternacional": {
                            "indAcordoIsenMulta": "1"
                        },
                        "softwareHouse": {
                            "cnpjSoftHouse": "55555555555555",
                            "nmRazao": "Leao",
                            "nmCont": "Formiga",
                            "telefone": "66666666666",
                            "email": "[email protected]"
                        }
                    },
                    "infoComplementares": {
                        "situacaoPJ": {
                            "indSitPJ": "1"
                        },
                        "situacaoPF": {
                            "indSitPF": "2"
                        }
                    }
                }
            }
        }
    }
}

As you can see, this softwareHouse only appears once (the last xml softwareHouse), but my goal is to make all of them appear, with the right attributes.

    
asked by anonymous 07.12.2017 / 11:45

1 answer

1

I was able to make sure my list appeared. Here are the parts that have been changed:

//Meu caminho para minha lista 
def list = parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse

//Dentro do jsonBuilder, eu substitui a parte do softwareHouse por essa, onde coloco minha classe softwareHouse  linkada a minha varaivel list(que contem meu caminho).collect (para indicar uma coleção/lista). Lá dentro foi feito um sistema Map.

softwareHouse list.collect {
        [
            cnpjSoftHouse: it.cnpjSoftHouse.text(),
            nmRazao: it.nmRazao.text(),
            nmCont: it.nmCont.text(),
            telefone: it.telefone.text(),
            email: it.email.text(),
        ]
    }

At the address below you can find the question where gave me the basis of the problem: link

    
07.12.2017 / 14:40