Quero poder acessar propriedades de uma sequência JSON dentro do meu método de ação Java. A string está disponível simplesmente dizendo myJsonString = object.getJson()
. Abaixo está um exemplo de como a string pode ser:
{
'title': 'ComputingandInformationsystems',
'id': 1,
'children': 'true',
'groups': [{
'title': 'LeveloneCIS',
'id': 2,
'children': 'true',
'groups': [{
'title': 'IntroToComputingandInternet',
'id': 3,
'children': 'false',
'groups': []
}]
}]
}
Nesta cadeia, todo objeto JSON contém uma matriz de outros objetos JSON. A intenção é extrair uma lista de IDs em que qualquer objeto específico possui uma propriedade de grupo que contém outros objetos JSON. Eu olhei para o Gson do Google como um potencial plugin JSON. Alguém pode oferecer alguma forma de orientação sobre como eu posso gerar Java a partir dessa string JSON?
Respostas:
O Google Gson suporta genéricos e beans aninhados. O
[]
em JSON representa uma matriz e deve ser mapeado para uma coleção Java comoList
ou apenas uma matriz Java simples. O{}
JSON representa um objeto e deve ser mapeado para uma JavaMap
ou apenas para alguma classe JavaBean.Você tem um objeto JSON com várias propriedades, das quais a
groups
propriedade representa uma matriz de objetos aninhados do mesmo tipo. Isso pode ser analisado com o Gson da seguinte maneira:Bastante simples, não é? Basta ter um JavaBean adequado e ligar
Gson#fromJson()
.Veja também:
fonte
Cuidado com o Gson! É muito legal, muito grande, mas o segundo que você quer fazer outra coisa senão objetos simples, você poderia facilmente precisa para começar a construir seus próprios serializers (que não é que difícil).
Além disso, se você tiver uma matriz de objetos e desserializar algum json nessa matriz de objetos, os tipos verdadeiros serão PERDIDOS! Os objetos completos nem serão copiados! Use XStream .. Que, se você estiver usando o jsondriver e definir as configurações apropriadas, codificará tipos feios no json real, para que você não perca nada. Um pequeno preço a pagar (json feio) pela serialização verdadeira.
Observe que Jackson corrige esses problemas e é mais rápido que o GSON.
fonte
Estranhamente, o único processador JSON decente mencionado até agora foi o GSON.
Aqui estão mais boas escolhas:
EDIT (Ago / 2013):
Mais um a considerar:
fonte
Ou com Jackson:
fonte
Se, por qualquer alteração, você estiver em um aplicativo que já use http://restfb.com/ , poderá:
etc.
fonte
Código java fácil e funcional para converter
JSONObject
paraJava Object
Employee.java
LoadFromJSON.java
fonte
fonte
Se você usar qualquer tipo de mapa especial com chaves ou valores também de mapas especiais, descobrirá que não é contemplado pela implementação do google.
fonte
O que há de errado com o material padrão?
fonte
Experimente o boon:
https://github.com/RichardHightower/boon
É rápido demais:
https://github.com/RichardHightower/json-parsers-benchmark
Não acredite na minha palavra ... confira o benchmark gatling.
https://github.com/gatling/json-parsers-benchmark
(Até 4x são alguns casos, e fora dos 100s de teste. Ele também possui um modo de sobreposição de índice ainda mais rápido. É jovem, mas já tem alguns usuários.)
Ele pode analisar JSON em Mapas e Listas mais rapidamente do que qualquer outra lib pode analisar em um DOM JSON e isso é sem o modo Index Overlay. Com o modo Boon Index Overlay, é ainda mais rápido.
Ele também possui um modo JSON lax muito rápido e um modo de análise PLIST. :) (e tem uma memória super baixa, direta do modo de bytes com codificação UTF-8 em tempo real).
Ele também possui o JSON mais rápido para o modo JavaBean.
É novo, mas se velocidade e API simples é o que você está procurando, não acho que exista uma API mais rápida ou minimalista.
fonte
Dependendo do formato JSON de entrada (string / arquivo), crie um jSONString. O objeto da classe Message Sample correspondente a JSON pode ser obtido como abaixo:
Mensagem msgFromJSON = new ObjectMapper (). ReadValue (jSONString, Message.class);
fonte
A maneira mais fácil é usar esse método softconvertvalue, que é um método personalizado no qual você pode converter jsonData em sua classe Dto específica.
fonte