Read JSON and transform into Java list

3

I have the following JSON:

{
    "_status": "sucesso",
    "_dados": [
        {
            "IdIntegracao": "H1xo7lOOX",
            "SacadoCPFCNPJ": "08896903912",
            "SacadoEmail": "[email protected]",
            "SacadoEnderecoNumero": "228",
            "SacadoEnderecoBairro": "SANTA MARIA",
            "SacadoEnderecoCEP": "87970000",
            "SacadoEnderecoCidade": "NOVA LONDRINA",
            "SacadoEnderecoComplemento": "casa",
            "SacadoEnderecoLogradouro": "RUA BELO HORIZONTE,228",
            "SacadoEnderecoPais": "Brasil",
            "SacadoEnderecoUF": "PR",
            "SacadoNome": "LEANDRO SANTOS CUSTODIO",
            "SacadoTelefone": null,
            "TituloDataDesconto": "13/10/2018 00:00:00",
            "TituloDataDesconto2": null,
            "TituloDataEmissao": "13/09/2018 00:00:00",
            "TituloDataVencimento": "13/10/2018 00:00:00",
            "TituloDataMulta": "14/10/2018 00:00:00",
            "PagamentoData": "13/09/2018 00:00:00",
            "PagamentoDataCredito": "14/09/2018 00:00:00",
            "TituloPrazoProtesto": null,
            "TituloMensagem01": "Infomania Sistemas Empresariais",
            "TituloMensagem02": "Após vencimento multa de 0,03 e juros de 0,50.",
            "TituloMensagem03": "Obrigado pela preferência.",
            "TituloMensagem04": null,
            "TituloMensagem05": null,
            "TituloMensagem06": null,
            "TituloMensagem07": null,
            "TituloMensagem08": null,
            "TituloMensagem09": null,
            "TituloInstrucao1": null,
            "TituloInstrucao2": null,
            "TituloOcorrencias": [
                {
                    "codigo": "02",
                    "mensagem": "Movimento: Entrada confirmada",
                    "criado": "2018-09-14T13:34:09.000Z",
                    "atualizado": "2018-09-14T13:34:09.000Z"
                },
                {
                    "codigo": "06",
                    "mensagem": "Movimento: Liquidação Normal",
                    "criado": "2018-09-14T13:34:09.000Z",
                    "atualizado": "2018-09-14T13:34:09.000Z"
                },
                {
                    "codigo": "28",
                    "mensagem": "Movimento: Tarifa",
                    "criado": "2018-09-14T13:34:09.000Z",
                    "atualizado": "2018-09-14T13:34:09.000Z"
                },
                {
                    "codigo": "B3",
                    "mensagem": "Tarifa de registro de entrada do título",
                    "criado": "2018-09-14T13:34:09.000Z",
                    "atualizado": "2018-09-14T13:34:09.000Z"
                }
            ],
            "TituloMovimentos": [
                {
                    "codigo": "02",
                    "mensagem": "Movimento: Entrada confirmada",
                    "data": "13/09/2018 00:00:00",
                    "ocorrencias": []
                },
                {
                    "codigo": "06",
                    "mensagem": "Movimento: Liquidação Normal",
                    "data": "13/09/2018 00:00:00",
                    "ocorrencias": [
                        {
                            "codigo": "H5"
                        }
                    ]
                },
                {
                    "codigo": "28",
                    "mensagem": "Movimento: Tarifa",
                    "data": "13/09/2018 00:00:00",
                    "ocorrencias": [
                        {
                            "codigo": "B3",
                            "mensagem": "Tarifa de registro de entrada do título"
                        }
                    ]
                }
            ],
            "TituloNossoNumero": "2844",
            "TituloNumeroDocumento": "2844",
            "TituloOrigemDocumento": null,
            "PagamentoRealizado": true,
            "TituloValorJuros": "0,50",
            "PagamentoValorCredito": "0,00",
            "TituloValorDesconto": "0,00",
            "TituloValorDescontoTaxa": "0,00",
            "TituloValorDescontoTaxa2": "0,00",
            "TituloValorOutrosAcrescimos": "0,00",
            "TituloValorMulta": "0,00",
            "TituloValorMultaTaxa": "0,00",
            "PagamentoValorPago": "3,00",
            "PagamentoValorTaxaCobranca": "1,50",
            "TituloValorAbatimento": "0,00",
            "PagamentoValorOutrasDespesas": "0,00",
            "PagamentoValorIOF": "0,00",
            "PagamentoValorOutrosCreditos": "0,00",
            "PagamentoDataTaxaBancaria": "13/09/2018 00:00:00",
            "TituloValor": "3,00",
            "situacao": "LIQUIDADO",
            "impressao_visualizada": false,
            "motivo": null,
            "PagamentoValorDesconto": "0,00",
            "PagamentoValorAcrescimos": "0,00",
            "PagamentoValorAbatimento": "0,00",
            "TituloAgenciaCobradora": null,
            "TituloAgenciaCobradoraDv": null,
            "TituloDataDocumento": null,
            "TituloLinhaDigitavel": "74891.11828 02844.307286 04612.331035 6 76760000000300",
            "TituloNossoNumeroImpressao": "182028443",
            "TituloCodigoBarras": "74896767600000003001118202844307280461233103",
            "TituloDataImpressaoVisualizada": null,
            "SacadoCelular": "44999958297",
            "TituloValorCobrado": "0,00",
            "TituloDataJuros": "14/10/2018 00:00:00",
            "TituloCodigoMulta": "2",
            "TituloAceite": null,
            "TituloPrazoBaixa": null,
            "TituloSacadorAvalista": "CHINA E REIS LOCAÇÃO DE MÁQUINAS LTDA",
            "TituloSacadorAvalistaEndereco": "Avenida JK 466",
            "TituloSacadorAvalistaCidade": "Nova Londrina",
            "TituloSacadorAvalistaCEP": "87970000",
            "TituloSacadorAvalistaUF": "PR",
            "TituloInscricaoSacadorAvalista": "08815635000159",
            "TituloCodBaixaDevolucao": null,
            "TituloCodigoJuros": null,
            "TituloDocEspecie": null,
            "TituloCodDesconto": null,
            "TituloCodDesconto2": null,
            "TituloCodEmissaoBloqueto": null,
            "TituloOutrasDeducoes": null,
            "TituloUsoBanco": null,
            "TituloPagamentoMinimo": "0,00",
            "TituloLocalPagamento": "PAGÁVEL PREFERENCIALMENTE NAS AGÊNCIAS DE CRÉDITO SICREDI",
            "TituloForcarFatorVencimento": null,
            "TituloInformacoesAdicionais": null,
            "TituloInstrucoes": null,
            "TituloParcela": null,
            "TituloVariacaoCarteira": null,
            "TituloCategoria": null,
            "TituloModalidade": "1",
            "TituloCodCliente": null,
            "TituloIos": null,
            "TituloCip": null,
            "TituloCodProtesto": 3,
            "CedenteAgencia": "072804",
            "CedenteAgenciaDV": null,
            "CedenteCodigoBanco": "748",
            "CedenteConta": "61233",
            "CedenteContaNumeroDV": "2",
            "CedenteCarteira": "1",
            "CedenteNumeroConvenio": "61233"
        }
    ],
    "_meta": {
        "_itens_por_pagina": 20,
        "_paginacao": {
            "_proximo": false,
            "_anterior": false
        },
        "_total": 1
    }
}

I need to get some information from there. I'm using the following method:

private static List<PagamentoRealizado> pagamentosDoJson(String json)
        throws IOException {
    JsonReader reader = Json.createReader(new StringReader(json));
    JsonObject status = reader.readObject();
    JsonObject dados = status.getJsonObject("sucesso");
    JsonArray titulosNaoConciliados = dados.getJsonArray("_dados");
    return titulosNaoConciliados
            .stream()
            .map(titulo -> {
                JsonObject obj = (JsonObject) titulo;
                String tituloNossoNumero = obj.getString("TituloNossoNumero");
                boolean pagamentoRealizado = obj.getBoolean("PagamentoRealizado");
                return new PagamentoRealizado(tituloNossoNumero, pagamentoRealizado);
            }).collect(Collectors.toList());
}

But I get an error of java.lang.NullPointerException here: JsonArray titulosNaoConciliados = dados.getJsonArray("_dados");

Would anyone have any idea how to solve this?

    
asked by anonymous 14.09.2018 / 16:34

1 answer

2

When using dados.getJsonArray("_dados"); you are trying to read _dados from within sucesso , which does not make sense. In fact, the node is not called sucesso but _status and it is a String that should be read with getString instead of getJsonObject .

The cause of the problem seems to be that you inverted the variables dados and status and ended up getting confused. This confusion is typically created because you have given incorrect names to variables and so use one thing for another. In fact, I would recommend calling% of% instead of% with% of JSON node representing the object read as a whole to avoid confusion.

So, these lines:

JsonObject status = reader.readObject();
JsonObject dados = status.getJsonObject("sucesso");
JsonArray titulosNaoConciliados = dados.getJsonArray("_dados");

Should be this:

JsonObject raiz = reader.readObject();
String status = raiz.getString("_status");
JsonArray titulosNaoConciliados = raiz.getJsonArray("_dados");
    
14.09.2018 / 18:04