5
respostas

Leitura de um Objeto Json - String

Boa noite!

Estou com um pequeno problema aqui. Preciso converter um Json para Object Java, para ser mais exato... para uma classe Java.

Abaixo está o parâmetro String do meu projeto

String janderson = "{\"Objeto\":\"{ \\\"Paginacao\\\":0, \\\"Pagina\\\":0, \\\"TotalPagina\\\": 1, \\\"Total\\\":0, \\\"TabelaHistorico\\\": [{ \\\"NOVA\\\":\\\"1\\\",\\\"CSEL_CODIGO\\\":\\\"8\\\",\\\"CASO_CODIGO\\\":\\\"71\\\",\\\"ELEM_CODIGO\\\":\\\"13\\\",\\\"USUA_CODIGO\\\":\\\"\\\",\\\"CSEL_DISPONIVEL\\\":\\\"23/11/2021 18:57:02\\\",\\\"CSEL_INICIO\\\":\\\"\\\",\\\"CSEL_FIM\\\":\\\"\\\",\\\"CSEL_STATUS\\\":\\\"2\\\",\\\"CSEL_PRIORIDADE\\\":\\\"0\\\",\\\"CSEL_RETORNO\\\":\\\"\\\",\\\"CSEL_OBSERVACOES\\\":\\\"\\\",\\\"CSEL_HISTORICO\\\":\\\"23/11/2021 18:57:02 - Iniciado\\r\\n23/11/2021 18:57:02 - Mudança De Status - DISPONIVEL Para INTERACAO\\r\\n\\\",\\\"CSEL_AGUARDANDO\\\":\\\"0\\\",\\\"CSEL_DATA_SLA_INI\\\":\\\"\\\",\\\"CSEL_DATA_SLA\\\":\\\"\\\",\\\"CSEL_PROXIMA_EXEC\\\":\\\"\\\",\\\"CSEL_MENSAGEM_ID\\\":\\\"\\\",\\\"USUA_NOME\\\":\\\"\\\",\\\"CASO_PRIORIDADE\\\":\\\"0\\\",\\\"CASO_NOME\\\":\\\"0000000071\\\",\\\"CASO_DATA_SLA_INI\\\":\\\"\\\",\\\"CASO_DATA_SLA\\\":\\\"\\\",\\\"CASO_DATA_RISCO\\\":\\\"\\\",\\\"ELEM_ID\\\":\\\"Task_0ty2n04\\\",\\\"ELEM_DESCRICAO\\\":\\\"\\\",\\\"ELEM_NOME\\\":\\\"Tratar Não Assinatura\\\",\\\"ELEM_ORIENTACAO\\\":\\\"\\\",\\\"ELEM_SLA_TIPO\\\":\\\"2\\\",\\\"ELEM_TIPO\\\":\\\"8\\\",\\\"ELEM_SLA\\\":\\\"0\\\",\\\"ELEM_TIPO_INTERACAO\\\":\\\"0\\\",\\\"PROC_CODIGO\\\":\\\"1\\\",\\\"PROC_NOME\\\":\\\"Assinatura Eletrônica\\\",\\\"EXECUTAVEL\\\":\\\"1\\\" }] }\",\"Retorno\":1,\"Mensagem\":\"\"}";

Da forma que estou fazendo a leitura só está me retornando os parâmetros de retorno e mensagem. os parâmetros como Paginacao, Total Pagina, Total e a própria lista TabelaHistorico só me retornam valores nulos/padrões

Estou usando essas duas conversões:

Essa

String json = gson.toJson(jsonObject);
Objeto obj2 = gson.fromJson(json,Objeto.class);

e

Objeto objeto = JSON.parseObject(janderson,Objeto.class);

Resultado de ambas:

Json [Paginacao=0, TotalPagina=0, Total=0, TabelaHistorico=null, Retorno=1, Mensagem=]

Será que alguém consegue me dar uma luz?

5 respostas

Oi Rafael,

Posta aqui o código da sua classe Objeto

Estava assim,

package br.com.comprev.testeJson;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Objeto {

    private int Paginacao;
    private int Pagina;
    private int TotalPagina;
    private int Total;
    private List<TabelaHistorico> TabelaHistorico;
    private int Retorno;
    private String Mensagem;

    public int getPagina() {
        return Pagina;
    }

    public void setPagina(int pagina) {
        Pagina = pagina;
    }

    public int getPaginacao() {
        return Paginacao;
    }

    public void setPaginacao(int paginacao) {
        Paginacao = paginacao;
    }

    public int getTotalPagina() {
        return TotalPagina;
    }

    public void setTotalPagina(int totalPagina) {
        TotalPagina = totalPagina;
    }

    public int getTotal() {
        return Total;
    }

    public void setTotal(int total) {
        Total = total;
    }

    public List<TabelaHistorico> getTabelaHistorico() {
        return TabelaHistorico;
    }

    public void setTabelaHistorico(List<TabelaHistorico> tabelaHistorico) {
        TabelaHistorico = tabelaHistorico;
    }

    public int getRetorno() {
        return Retorno;
    }

    public void setRetorno(int retorno) {
        Retorno = retorno;
    }

    public String getMensagem() {
        return Mensagem;
    }

    public void setMensagem(String mensagem) {
        Mensagem = mensagem;
    }

    @Override
    public String toString() {
        return "Json [Paginacao=" + Paginacao + ", TotalPagina=" + TotalPagina + ", Total=" + Total
                + ", TabelaHistorico=" + TabelaHistorico + ", Retorno=" + Retorno + ", Mensagem=" + Mensagem + "]";
    }

}

`

E montei uma nova classe para tentar uma solução também, mas de nada adiantou:

package br.com.comprev.testeJson;

public class TabelaHistorico {
    @JsonProperty("Nova")
    public String nova;
    @JsonProperty("CSEL_CODIGO")
    public String cSEL_CODIGO;
    @JsonProperty("CASO_CODIGO")
    public String cASO_CODIGO;
    @JsonProperty("ELEM_CODIGO")
    public String eLEM_CODIGO;
    @JsonProperty("USUA_CODIGO")
    public String uSUA_CODIGO;
    @JsonProperty("CSEL_DISPONIVEL")
    public String cSEL_DISPONIVEL;
    @JsonProperty("CSEL_INICIO")
    public String cSEL_INICIO;
    @JsonProperty("CSEL_FIM")
    public String cSEL_FIM;
    @JsonProperty("CSEL_STATUS")
    public String cSEL_STATUS;
    @JsonProperty("CSEL_PRIORIDADE")
    public String cSEL_PRIORIDADE;
    @JsonProperty("CSEL_RETORNO")
    public String cSEL_RETORNO;
    @JsonProperty("CSEL_OBSERVACOES")
    public String cSEL_OBSERVACOES;
    @JsonProperty("CSEL_HISTORICO")
    public String cSEL_HISTORICO;
    @JsonProperty("CSEL_AGUARDANDO")
    public String cSEL_AGUARDANDO;
    @JsonProperty("CSEL_DATA_SLA_INI")
    public String cSEL_DATA_SLA_INI;
    @JsonProperty("CSEL_DATA_SLA")
    public String cSEL_DATA_SLA;
    @JsonProperty("CSEL_PROXIMA_EXEC")
    public String cSEL_PROXIMA_EXEC;
    @JsonProperty("CSEL_MENSAGEM_ID")
    public String cSEL_MENSAGEM_ID;
    @JsonProperty("USUA_NOME")
    public String uSUA_NOME;
    @JsonProperty("CASO_PRIORIDADE")
    public String cASO_PRIORIDADE;
    @JsonProperty("CASO_NOME")
    public String cASO_NOME;
    @JsonProperty("CASO_DATA_SLA_INI")
    public String cASO_DATA_SLA_INI;
    @JsonProperty("CASO_DATA_SLA")
    public String cASO_DATA_SLA;
    @JsonProperty("CASO_DATA_RISCO")
    public String cASO_DATA_RISCO;
    @JsonProperty("ELEM_ID")
    public String eLEM_ID;
    @JsonProperty("ELEM_DESCRICAO")
    public String eLEM_DESCRICAO;
    @JsonProperty("ELEM_NOME")
    public String eLEM_NOME;
    @JsonProperty("ELEM_ORIENTACAO")
    public String eLEM_ORIENTACAO;
    @JsonProperty("ELEM_SLA_TIPO")
    public String eLEM_SLA_TIPO;
    @JsonProperty("ELEM_SLA")
    public String eLEM_SLA;
    @JsonProperty("ELEM_TIPO_INTERACAO")
    public String eLEM_TIPO_INTERACAO;
    @JsonProperty("PROC_CODIGO")
    public String pROC_CODIGO;
    @JsonProperty("PROC_NOME")
    public String pROC_NOME;
    @JsonProperty("EXECUTAVEL")
    public String eXECUTAVEL;

    @Override
    public String toString() {
        return "TabelaHistorico [Nova=" + Nova + ", CSEL_CODIGO=" + CSEL_CODIGO + ", CASO_CODIGO=" + CASO_CODIGO
                + ", ELEM_CODIGO=" + ELEM_CODIGO + ", USUA_CODIGO=" + USUA_CODIGO + ", CSEL_DISPONIVEL="
                + CSEL_DISPONIVEL + ", CSEL_INICIO=" + CSEL_INICIO + ", CSEL_FIM=" + CSEL_FIM + ", CSEL_STATUS="
                + CSEL_STATUS + ", CSEL_PRIORIDADE=" + CSEL_PRIORIDADE + ", CSEL_RETORNO=" + CSEL_RETORNO
                + ", CSEL_OBSERVACAOES=" + CSEL_OBSERVACAOES + ", CSEL_HISTORICO=" + CSEL_HISTORICO
                + ", CSEL_AGUARDANDO=" + CSEL_AGUARDANDO + ", CSEL_DATA_SLA_INICI=" + CSEL_DATA_SLA_INICI
                + ", CSEL_DATA_SLA=" + CSEL_DATA_SLA + ", CSEL_PROXIMA_EXEC=" + CSEL_PROXIMA_EXEC
                + ", CSEL_MENSAGEM_ID=" + CSEL_MENSAGEM_ID + ", USUA_NOME=" + USUA_NOME + ", CASO_PRIORIDADE="
                + CASO_PRIORIDADE + ", CASO_NOME=" + CASO_NOME + ", CASO_DATA_SLA_INICI=" + CASO_DATA_SLA_INICI
                + ", CASO_DATA_SLA=" + CASO_DATA_SLA + ", CASO_DATA_RISCO=" + CASO_DATA_RISCO + ", ELEM_ID=" + ELEM_ID
                + ", ELEM_DESCRICAO=" + ELEM_DESCRICAO + ", ELEM_NOME=" + ELEM_NOME + ", ELEM_ORIENTACAO="
                + ELEM_ORIENTACAO + ", ELEM_SLA_TIPO=" + ELEM_SLA_TIPO + ", ELEM_SLA=" + ELEM_SLA
                + ", ELEM_TIPO_INTERACAO=" + ELEM_TIPO_INTERACAO + ", PROC_CODIGO=" + PROC_CODIGO + ", PROC_NOME="
                + PROC_NOME + ", EXECUTAVEL=" + EXECUTAVEL + "]";
    }
}

Oi Rafael,

Na verdade verifiquei que você está utilizando 2 bibliotecas de conversão de JSON: Jackson e Gson. Recomendo você utilizar somente uma delas, por exemplo o Jackson.

Você pode o utilizar dessa maneira:

public class Teste {

    public static void main(String[] args) throws Exception {
        String janderson = "{\"Paginacao\":0, \"Pagina\":0, \"TotalPagina\": 1, \"Total\":0, \"TabelaHistorico\": [{ \"NOVA\":\"1\",\"CSEL_CODIGO\":\"8\",\"CASO_CODIGO\":\"71\",\"ELEM_CODIGO\":\"13\",\"USUA_CODIGO\":\"\",\"CSEL_DISPONIVEL\":\"23/11/2021 18:57:02\",\"CSEL_INICIO\":\"\",\"CSEL_FIM\":\"\",\"CSEL_STATUS\":\"2\",\"CSEL_PRIORIDADE\":\"0\",\"CSEL_RETORNO\":\"\",\"CSEL_OBSERVACOES\":\"\",\"CSEL_HISTORICO\":\"23/11/2021 18:57:02 - Iniciadorn23/11/2021 18:57:02 - Mudança De Status - DISPONIVEL Para INTERACAOrn\",\"CSEL_AGUARDANDO\":\"0\",\"CSEL_DATA_SLA_INI\":\"\",\"CSEL_DATA_SLA\":\"\",\"CSEL_PROXIMA_EXEC\":\"\",\"CSEL_MENSAGEM_ID\":\"\",\"USUA_NOME\":\"\",\"CASO_PRIORIDADE\":\"0\",\"CASO_NOME\":\"0000000071\",\"CASO_DATA_SLA_INI\":\"\",\"CASO_DATA_SLA\":\"\",\"CASO_DATA_RISCO\":\"\",\"ELEM_ID\":\"Task_0ty2n04\",\"ELEM_DESCRICAO\":\"\",\"ELEM_NOME\":\"Tratar Não Assinatura\",\"ELEM_ORIENTACAO\":\"\",\"ELEM_SLA_TIPO\":\"2\",\"ELEM_TIPO\":\"8\",\"ELEM_SLA\":\"0\",\"ELEM_TIPO_INTERACAO\":\"0\",\"PROC_CODIGO\":\"1\",\"PROC_NOME\":\"Assinatura Eletrônica\",\"EXECUTAVEL\":\"1\" }],\"Retorno\":1,\"Mensagem\":\"\"}";

        ObjectMapper objectMapper = new ObjectMapper();

        Objeto objeto = objectMapper.readValue(janderson, Objeto.class);
        System.out.println(objeto);
    }

}
@JsonIgnoreProperties(ignoreUnknown = true)
public class Objeto {

    @JsonAlias("Paginacao")
    private int paginacao;

    @JsonAlias("Pagina")
    private int pagina;

    @JsonAlias("TotalPagina")
    private int totalPagina;

    @JsonAlias("Total")
    private int total;

    @JsonAlias("TabelaHistorico")
    private List<TabelaHistorico> tabelaHistorico;

    @JsonAlias("Retorno")
    private int retorno;

    @JsonAlias("Mensagem")
    private String mensagem;

    public int getPaginacao() {
        return paginacao;
    }

    public void setPaginacao(int paginacao) {
        this.paginacao = paginacao;
    }

    public int getPagina() {
        return pagina;
    }

    public void setPagina(int pagina) {
        this.pagina = pagina;
    }

    public int getTotalPagina() {
        return totalPagina;
    }

    public void setTotalPagina(int totalPagina) {
        this.totalPagina = totalPagina;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public List<TabelaHistorico> getTabelaHistorico() {
        return tabelaHistorico;
    }

    public void setTabelaHistorico(List<TabelaHistorico> tabelaHistorico) {
        this.tabelaHistorico = tabelaHistorico;
    }

    public int getRetorno() {
        return retorno;
    }

    public void setRetorno(int retorno) {
        this.retorno = retorno;
    }

    public String getMensagem() {
        return mensagem;
    }

    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    @Override
    public String toString() {
        return "Json [Paginacao=" + paginacao + ", TotalPagina=" + totalPagina + ", Total=" + total
                + ", TabelaHistorico=" + tabelaHistorico + ", Retorno=" + retorno + ", Mensagem=" + mensagem + "]";
    }

}

Repare que deixei os atributos com a primeira letra em minúsculo, seguindo a convensão do Java, e gerei os getter/setter pela própria IDE.

A anotação @JsonAlias indica pro Jackson que o nome do atributo é diferente do nome da propriedade vinda no JSON.

Você pode usar esse mesmo esquema na classe TabelaHistorico que vai funcionar corretamente.

Bons estudos!

Campeão, fiz as mudanças conforme orientado. Mas segue retornando tudo null.

Objeto [paginacao=null, totalPagina=null, total=null, tabelaHistorico=null]