1
resposta

Pegando valores de ArrayList no Json

Olá, tudo bem?

Estou com dúvida na seguinte situação: Tenho um webservice que me retorna um json. O json passa pelo body da mensagem e me retorna uma String com os dados que preciso.

Como faço para pegar os valores dessa String que retornou e armazenar em uma property? Preciso desserializar o json? O que acontece quando debugo é que esses dados saem nulos. Como faço para pegar os dados do body e armazenar na property?

Lembrando que meu json possui uma lista dentro de outra lista. São várias listas.

public void formataSaida (Exchange exchange) throws Exception{

String body = getIn().getBody(String.class); List<ConsultarDadosConta> dados = new ArrayList <ConsultarDadosConta>;

exchange.setProperty( "dadosConta", dados);

}

***Meu json: https://llumine.com.br/img/json.png

Desde já, agradeço a ajuda! To há 3 dias empacada nisso ¬¬'

1 resposta

Ola, Existem infinitas formas de fazer isso, usando bibliotecas, fazendo na unha. De uma maneira simples eu recomendo você utilizar uma pequena biblioteca que apenas faz parse de JSON. Com o parse feito, você pode apenas acionar as propriedades vamos levar em conta o Json que você tem, veja o exemplo.

JSONObject obj = new JSONObject(payload); // Aqui você esta convertendo a String para Obj Json.
//Podemos acessar os campos Data, Hora e Pessoas.
//Para acessar os atributos de pessoa precisamos de um array de JSON.
JSONArray arr = obj.getJSONArray("Pessoas");
//Como isso é um array tem que iterar dentro dele, um simples for resolve.
for(int i=0; i<arr.length(); i++) {
    JSONObject obj1 = arr.getJSONObject(i); //Iterando posicao por posicao do array
//Aqui dentro temos acessivel
//NumeroDocumentoFiscal, NumeroDocumentoProponente, Nome, Tipo de Pessoa e DocumentosDevolvidos.
}

Agora o processo se repete para os outros arrays.

Existem outras bibliotecas que fazem esse serviço também, como por exemplo o Jackson, mas essa que demonstrei é mais simples e intuitiva.

Você pode baixa-la pela depência do maven

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20170516</version>
</dependency>

Com o JSONObject em mão e podendo acessar as suas infos apenas obj.getString("Data"); e da mesma forma para os demais dependendo do tipo de dados que esta recebendo (existem uma infinidade....), você pode simplesmente colocar no seu property.

Espero ter ajudado.