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:
{
"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"
}
]
}
}
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?
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<Lojas> loja;
}
public class Lojas{
private String nome;
private Double tamanho;
private List<Dados> 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);
}