Problems generating JSON with JAVA

Asked

Viewed 108 times

1

I’m having trouble generating this json

{
    "receita": [{
        "specialtys": [{
            "date": "27/01/2016 00:00:00",
            "itemSpecialtys": [{
                "specialtyId": 1,
                "specialtyName": "Tabelionato de Notas",
                "receitas": [{
                    "id": 2,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratura de escrituras públicas com valor declarado (15) - Teste Receita Joyce -",
                    "value": 20
                }, {
                    "id": 3,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratura de escrituras públicas com valor declarado (15) - Joyce",
                    "value": 200
                }, {
                    "id": 4,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratura de escrituras públicas com valor declarado -",
                    "value": 3
                }, {
                    "id": 5,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratura de escrituras públicas com valor declarado - teste",
                    "value": 300
                }, {
                    "id": 7,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratu- teste teste teste",
                    "value": 3
                }, {
                    "id": 9,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratura de escrituras públicas com valor declarado -",
                    "value": 0.33
                }, {
                    "id": 10,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "eem valor declarado -Escrituras - Lavratura de escrituras declarado -",
                    "value": 0.33
                }, {
                    "id": 11,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Reconhecimento de firmas - Reconhecimento de firma -",
                    "value": 3.33
                }]
            }]
        }, {
            "date": "26/01/2016 00:00:00",
            "itemSpecialtys": [{
                "specialtyId": 1,
                "specialtyName": "Tabelionato de Notas",
                "receitas": [{
                    "id": 6,
                    "date": "26/01/2016 00:00:00",
                    "descricao": "Escrituras - ",
                    "value": 20
                }]
            }]
        }, {
            "date": "01/01/2016 00:00:00",
            "itemSpecialtys": [{
                "specialtyId": 1,
                "specialtyName": "Tabelionato de Notas",
                "receitas": [{
                    "id": 1,
                    "date": "01/01/2016 00:00:00",
                    "descricao": "outro teste ",
                    "value": 20
                }]
            }]
        }, {
            "date": "28/01/2016 00:00:00",
            "itemSpecialtys": [{
                "specialtyId": 1,
                "specialtyName": "Tabelionato de Notas",
                "receitas": [{
                    "id": 8,
                    "date": "01/01/2016 00:00:00",
                    "descricao": "outro teste ",
                    "value": 20
                }]
            }]
        }]
    }]
}

for what I get from answering my duties is this:

{
    "receita": [{
        "specialtys": [{
            "date": "27/01/2016 00:00:00",
            "itemSpecialtys": [{
                "specialtyId": 1,
                "specialtyName": "Tabelionato de Notas",
                "receitas": [{
                    "id": 2,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratura de escrituras públicas com valor declarado (15) - Teste Receita Joyce -",
                    "value": 20
                }, {
                    "id": 3,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratura de escrituras públicas com valor declarado (15) - Joyce",
                    "value": 200
                }, {
                    "id": 4,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratura de escrituras públicas com valor declarado -",
                    "value": 3
                }, {
                    "id": 5,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratura de escrituras públicas com valor declarado - teste",
                    "value": 300
                }, {
                    "id": 7,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratu- teste teste teste",
                    "value": 3
                }, {
                    "id": 9,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Escrituras - Lavratura de escrituras públicas com valor declarado -",
                    "value": 0.33
                }, {
                    "id": 10,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "eem valor declarado -Escrituras - Lavratura de escrituras declarado -",
                    "value": 0.33
                }, {
                    "id": 11,
                    "date": "27/01/2016 00:00:00",
                    "descricao": "Reconhecimento de firmas - Reconhecimento de firma -",
                    "value": 3.33
                }]
            }]
        }, {
            "date": "26/01/2016 00:00:00"
        }, {
            "date": "01/01/2016 00:00:00"
        }, {
            "date": "28/01/2016 00:00:00"
        }]
    }]
}

Notice that it mounts the first division by date correctly, but not replica for the other dates, ie, it does not repeat the loop, someone would you know what LOGICA error I’m making? the methods that are those:

private List<RelatorioTO> orderSpecialtyListForDate(List<ReceitaTO> receitasTO){
    List<RelatorioTO> relatorioTOs = new ArrayList<RelatorioTO>();
    List<RelatorioEspecialidadeTO> specialtys = new ArrayList<RelatorioEspecialidadeTO>();
    List<ReceitaTO> receitasOK = new ArrayList<ReceitaTO>();
    //verifica cada receita pra comparar e ornaginar por data
    Boolean exists = false;
    for (ReceitaTO rTO : receitasTO){
        exists = false;
        for(RelatorioEspecialidadeTO specialty : specialtys){ // acho que ta aqui o problema
            if(rTO.getEffectuationDate().equals(specialty.getDate())){
                receitasOK.add(rTO);
                //verifica cada receita pra comparar e ornaginar por especialidade
                specialty.setValues(orderItemSpecialtyListForSpecialty(specialty, receitasOK));
                exists = true;
            }
        }
        if(!exists){
            RelatorioEspecialidadeTO specialty = new RelatorioEspecialidadeTO();
            specialty.setDate(rTO.getEffectuationDate());
            specialtys.add(specialty);
        }
    }

    RelatorioTO relTO = new RelatorioTO();
    relTO.setSpecialty(specialtys);
    relatorioTOs.add(relTO);
    return relatorioTOs;
}


private List<RelatorioItemEspecialidadeTO> orderItemSpecialtyListForSpecialty(RelatorioEspecialidadeTO specialty, List<ReceitaTO> receitasOK){
    List<RelatorioItemEspecialidadeTO> specialtys = new ArrayList<RelatorioItemEspecialidadeTO>();
    //verifica cada receita pra comparar e ornaginar po especialidade
    Boolean exists = false; 
    for (ReceitaTO rTO : receitasOK){
        exists = false;
        if(specialtys.size() == 0) {
            RelatorioItemEspecialidadeTO itemSpecialty = new RelatorioItemEspecialidadeTO();
            itemSpecialty.setSpecialtyId(rTO.getSpecialty().getIdSpecialty());
            itemSpecialty.setSpecialtyName(rTO.getSpecialty().getDescription());
            specialtys.add(itemSpecialty);
        }
        for(RelatorioItemEspecialidadeTO itemSpecialty : specialtys){
            if(rTO.getSpecialty().getIdSpecialty().equals(itemSpecialty.getSpecialtyId())){                         
                //verifica cada receita pra comparar e ornaginar por id
                itemSpecialty.setReceitas(orderRevenuesListbyID(receitasOK));
                exists = true;
            }
        } 
        if(!exists) {
            RelatorioItemEspecialidadeTO itemSpecialty = new RelatorioItemEspecialidadeTO();
            itemSpecialty.setSpecialtyId(rTO.getSpecialty().getIdSpecialty());
            itemSpecialty.setSpecialtyName(rTO.getSpecialty().getDescription());
            specialtys.add(itemSpecialty);
        }
    }
    return specialtys;
}

private List<RelatorioReceitasTO> orderRevenuesListbyID(List<ReceitaTO> receitasTO) {
    List<RelatorioReceitasTO> receitas = new ArrayList<RelatorioReceitasTO>();
    //verifica cada receita pra comparar e ornaginar po especialidade
    for (ReceitaTO rTO : receitasTO){
        Boolean exists = false;         
        for(RelatorioReceitasTO receita : receitas){
            if(rTO.getIdRevenue().equals(receita.getId())){                         
                exists = true;
            }
        }
        if(!exists){
            RelatorioReceitasTO receita = new RelatorioReceitasTO();
            receita.setId(rTO.getIdRevenue());
            receita.setDate(rTO.getEffectuationDate());
            receita.setDescricao(rTO.getDescription());
            receita.setValue(rTO.getValue());
            receitas.add(receita);
        }
    }
    return receitas;
}
  • Managed to solve?

  • not yet face =S

  • Have you checked if the list you are receiving contains the little faces you want to reference? If you can, put the code where this list is filled in.

  • yes I am able to assemble and access the data, the problem is of logic, it mounts a part only once, despite creating the separation of the dates

  • Friend, to be able to help you, I need more information. You can post the entire JSON build flow?

  • What are you using to serialize JSON? How are your objects (your Tos)? It should be no problem to fill your objects, but some back Ference wrong configured, as the data are equal, some serializers do not duplicate the information by default.

  • Are you holding the json? I suggest that you use Aphries that do this for you, like this one: https://mvnrepository.com/artifact/com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/2.2.3.

Show 2 more comments
No answers

Browser other questions tagged

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