Conversão Json para Objeto Java

E ai galera, blz?

To enrolado aqui com uma conversão de JSON para uma Objeto Java. Quando é um JSON simples eu consigo fazer na boa, sem demais problemas.

O que ta pegando é que esse JSON tem o encadeamento de 3 objetos, sendo 1 o principal (que armazena tudo) e outros dois que serão guardados em List<>. Segue abaixo:

{
    &quot;Tabela&quot;: {
        &quot;Lojas&quot;: [
            {
                &quot;Nome&quot;: &quot;Barra&quot;,
                &quot;Tamanho&quot;: 89.9,
                &quot;Dados&quot;: [
                    {
                        &quot;Texto&quot;: &quot;&quot;,
                        &quot;Tamanho&quot;: 89.9,
                        &quot;Tipo&quot;: 0
                    },
                    {
                        &quot;Texto&quot;: &quot;Rua Velha&quot;,
                        &quot;Tamanho&quot;: 0,
                        &quot;Tipo&quot;: 1
                    },
                    {
                        &quot;Texto&quot;: null,
                        &quot;Tamanho&quot;: 0,
                        &quot;Tipo&quot;: 2
                    }
                ],
                &quot;Codigo&quot;: &quot;01&quot;
            },
            {
                &quot;Nome&quot;: &quot;Rio&quot;,
                &quot;Tamanho&quot;: 105,
                &quot;Dados&quot;: [
                    {
                        &quot;Texto&quot;: &quot;&quot;,
                        &quot;Tamanho&quot;: 105,
                        &quot;Tipo&quot;: 0
                    },
                    {
                        &quot;Texto&quot;: null,
                        &quot;Tamanho&quot;: 0,
                        &quot;Tipo&quot;: 1
                    },
                    {
                        &quot;Texto&quot;: null,
                        &quot;Tamanho&quot;: 0,
                        &quot;Tipo&quot;: 2
                    }
                ],
                &quot;Codigo&quot;: &quot;89&quot;
            }
        ]
    }
}

To tentando usar a biblioteca GSON para fazer a conversão, mas só recebo NULO na resposta.

Alguem sabe como posso fazer essa conversão?

cara… tenta usar o JackSon… é bem simples…

http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

Fala Daniel,

A conversão desse tipo eu to conseguindo fazer, mas no meu caso tem um “aninhamento” de objetos., um objeto é atributo do outro e acho que essa dependência é que ta complicando as coisas.

você tentou criar o Objeto Tabela com uma lista Lojas dentro para ver o que acontece?

acho que para funcionar tem que respeitar a estrutura do json. isso usando o jackson…

Segue as classes que criei para receber o JSON:


public class Tabela{

    private List&lt;Lojas&gt; loja;

}

public class Lojas{

   private String nome;
   private Double tamanho;
   private List&lt;Dados&gt; dados;
   private String codigo;

}

public class Dados{

   private String texto;
   private Double tamanho;
   private int tipo;

}

mesmo assim não deu certo? esta retornando nulo? isso usando o jackson neh?

Deu isso aqui:


null
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "Tabela" (Class Tabela), not marked as ignorable
 at [Source: java.io.StringReader@7ef229cd; line: 1, column: 12] (through reference chain: Tabela["Tabela"])
	at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
	at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
	at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:649)
	at org.codehaus.jackson.map.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:635)
	at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:1355)
	at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:717)
	at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
	at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2723)
	at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1854)
	at tESTE.main(tESTE.java:17)


Posta a sua classe de teste para eu dar uma olhada por favor!


public class tESTE {
	
	
	public static void main(String[] args) {

		String json = "{\"Tabela\":{\"Lojas\":[{\"Nome\":\"Barra\",\"Tamanho\": 89.9,\"Dados\":[{\"Texto\": \"\",\"Tamanho\": 89.9,\"Tipo\":0},{\"Texto\":\"Rua Velha\",\"Tamanho\":0,\"Tipo\":1},{\"Texto\":null,\"Tamanho\": 0,\"Tipo\": 2}],\"Codigo\": \"01\"},{\"Nome\": \"Rio\",\"Tamanho\": 105,\"Dados\":[{\"Texto\": \"\",\"Tamanho\":105,\"Tipo\":0},{\"Texto\":null,\"Tamanho\":0,\"Tipo\":1},{\"Texto\":null,\"Tamanho\":0,\"Tipo\":2}],\"Codigo\":\"89\"}]}}";
		
		
				System.out.println(json);
				Tabela tabela = new Tabela();
				ObjectMapper mapper = new ObjectMapper();
		
				try {
				
					tabela = mapper.readValue(json, Tabela.class);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		
				System.out.println(tabela);
				
	}

  String json = "{Tabela:{Lojas:[{Nome:Barra,Tamanho: 89.9,Dados:[{Texto:,Tamanho: 89.9,Tipo:0},{Texto:Rua Velha,Tamanho:0,Tipo:1},{Texto:null,Tamanho: 0,Tipo: 2}],Codigo:01},{Nome: Rio,Tamanho: 105,Dados:[{Texto: ,Tamanho:105,Tipo:0},{Texto:null,Tamanho:0,Tipo:1},{Texto:null,Tamanho:0,Tipo:2}],Codigo:89}]}}";

tenta assim e veja o que acontece…

Outro tipo de erro. bem esquisito.


org.codehaus.jackson.JsonParseException: Unexpected character ('T' (code 84)): was expecting double-quote to start field name
 at [Source: java.io.StringReader@34d6e7b8; line: 1, column: 3]
null
	at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1432)
	at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:385)
	at org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:306)
	at org.codehaus.jackson.impl.ReaderBasedParser._handleUnusualFieldName(ReaderBasedParser.java:1078)
	at org.codehaus.jackson.impl.ReaderBasedParser._parseFieldName(ReaderBasedParser.java:971)
	at org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.java:412)
	at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:579)
	at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2723)
	at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1854)
	at tESTE.main(tESTE.java:21)


então cara… dei uma olhada… o problema e no seu json mesmo…

testa com esse aqui que vai funcionar… ele cria o objeto Tabela com a lista de lojas dentro…

o resto e com você


    public static void main(String[] args) {  
        
        String json = "{\"loja\" : [{ " +
        				"\"nome\" : \"Daniel\" , " +
        				"\"tamanho\" : 15.0 , " +
        				"\"codigo\" : 123 ," +
        				
        			   " \"dados\" : [{" +
        			   			"\"texto\":\"ASDAS\"," +
        			   			"\"tamanho\":\"12\"," +
        			   			"\"tipo\":1}]" +
        			   			"}]" +
        			   	" }";
          
                System.out.println(json);  
                Tabela tabela = new Tabela();  
                ObjectMapper mapper = new ObjectMapper();  
          
                try {  
                  
                	tabela = mapper.readValue(json, Tabela.class);
                } catch (IOException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
          
                System.out.println(tabela);  
                  
    }