Groovy - JSON List Scheme

Asked

Viewed 130 times

1

I have a problem reading a certain part of a file xml that I’m turning into file JSON.

First I get this file with the class File and throw him in my class XmlParser, responsible for parsing my xml file, soon after play on JsonBuilder to create my structure JSON.

The problem starts there, if I analyze a normal structure, that is not a list, it goes normal, but when it arrives in a list it gathers these 3 in one and it is all stuck, I tried to put the part of the "father" inside a was with a [i](accountant) soon after for him to know to differentiate, only of the one error of JsonDelegator.

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

ARQUVIO 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>

ARQUIVO.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, it only appears once softwareHouse(the latest xml softwareHouse), but my goal is to make everyone appear, with the right attributes.

1 answer

1

I managed to make sure my list appears correctly. Below 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(),
        ]
    }

In the address below you can find the question where gave me the basis of the problem: https://stackoverflow.com/questions/28206255/groovy-simple-json-array-builder

Browser other questions tagged

You are not signed in. Login or sign up in order to post.