Em um projeto Java Maven, como você gera arquivos de origem java a partir do JSON? Por exemplo, temos
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York"
}
}
Quando rodamos mvn generate-sources
, queremos que ele gere algo como isto:
class Address {
JSONObject mInternalJSONObject;
Address (JSONObject json){
mInternalJSONObject = json;
}
String getStreetAddress () {
return mInternalJSONObject.getString("streetAddress");
}
String getCity (){
return mInternalJSONObject.getString("city");
}
}
class Person {
JSONObject mInternalJSONObject;
Person (JSONObject json){
mInternalJSONObject = json;
}
String getFirstName () {
return mInternalJSONObject.getString("firstName");
}
String getLastName (){
return mInternalJSONObject.getString("lastName");
}
Address getAddress (){
return Address(mInternalJSONObject.getString("address"));
}
}
Como desenvolvedor Java, quais linhas de XML eu preciso escrever no meu pom.xml
para que isso aconteça?
Respostas:
Experimente o plug-in jsonschema2pojo :
Ele
<sourceType>json</sourceType>
cobre o caso em que as fontes são json (como o OP). Se você tiver esquemas json reais , remova esta linha.Atualizado em 2020. Duas coisas aconteceram desde dezembro de 2009, quando essa pergunta foi feita:
A especificação do esquema JSON mudou muito. Ainda está em rascunho (não finalizado), mas está próximo da conclusão e agora é uma ferramenta viável que especifica suas regras estruturais
Recentemente, iniciei um novo projeto de código aberto especificamente destinado a resolver seu problema: jsonschema2pojo . A ferramenta jsonschema2pojo pega um documento de esquema json e gera classes Java no estilo DTO (na forma de arquivos de origem .java). O projeto ainda não está maduro, mas já fornece cobertura das partes mais úteis do esquema json. Estou procurando mais feedback dos usuários para ajudar a impulsionar o desenvolvimento. No momento, você pode usar a ferramenta na linha de comando ou como um plugin do Maven.
Espero que isto ajude!
fonte
Se você estiver usando Jackson (a biblioteca mais popular lá), tente
https://github.com/astav/JsonToJava
Seu código aberto e qualquer pessoa deve poder contribuir.
Resumo
Um gerador de arquivo de classe de origem JsonToJava que deduz o esquema com base nos dados json de amostra fornecidos e gera as estruturas de dados java necessárias.
Ele incentiva as equipes a pensar em Json primeiro, antes de escrever o código real.
Recursos
fonte
Aqui está uma ferramenta on - line que utiliza o JSON, incluindo objetos aninhados ou matrizes aninhadas de objetos e gera uma fonte Java com anotações de Jackson.
fonte
Respondendo a essa pergunta antiga com o projeto recente ;-).
No momento, a melhor solução é provavelmente o JsonSchema2Pojo :
Ele faz o trabalho do esquema Json raramente usado, mas também com o Json comum. Ele fornece o plug-in Ant e Maven e um aplicativo de teste on - line pode fornecer uma idéia da ferramenta. Coloquei um Tweet Json e gerou toda a classe que contém (Tweet, Usuário, Local, etc.).
Vamos usá-lo no projeto Agorava para gerar o mapeamento de mídia social e acompanhar a evolução do conteúdo em sua API.
fonte
Obrigado a todos que tentaram ajudar.
Para mim, esse script foi útil. Ele processa apenas JSON simples e não cuida de tipos, mas automatiza algumas rotinas
fonte
Estou ciente de que essa é uma pergunta antiga, mas me deparei com ela enquanto tentava encontrar uma resposta.
A resposta que menciona o gerador json-pojo online (jsongen) é boa, mas eu precisava de algo que pudesse executar na linha de comando e ajustar mais.
Então, eu escrevi um script ruby muito hacky para pegar um arquivo JSON de amostra e gerar POJOs a partir dele. Ele tem várias limitações (por exemplo, não trata de campos que correspondem a palavras-chave reservadas em java), mas faz o suficiente para muitos casos.
O código gerado, por padrão, faz anotações para uso com Jackson, mas isso pode ser desativado com um comutador.
Você pode encontrar o código no github: https://github.com/wotifgroup/json2pojo
fonte
Até onde eu sei, não existe essa ferramenta. Ainda.
O principal motivo é, suspeito, que, diferentemente do XML (que possui Esquema XML e, em seguida, ferramentas como 'xjc' para fazer o que você pede, entre definições XML e POJO), não existe uma linguagem de esquema com recursos completos. Existe o esquema JSON, mas ele tem muito pouco suporte para definições de tipos reais (enfoca as estruturas JSON), portanto, seria complicado gerar classes Java. Mas provavelmente ainda é possível, esp. se algumas convenções de nomenclatura foram definidas e usadas para dar suporte à geração.
No entanto: isso é algo que tem sido solicitado com bastante frequência (nas listas de discussão dos projetos de ferramentas JSON que eu sigo), então acho que alguém escreverá essa ferramenta em um futuro próximo.
Portanto, não acho que seja uma má ideia em si (também: não é uma boa ideia para todos os casos de uso, depende do que você deseja fazer).
fonte
Eu tinha o mesmo problema, então decidi começar a escrever uma pequena ferramenta para me ajudar com isso. Vou compartilhar e abrir a fonte.
https://github.com/BrunoAlexandreMendesMartins/CleverModels
Ele suporta JAVA, C # e Objective-c de JSON.
Sinta-se livre para contribuir!
fonte
Você também pode tentar a biblioteca GSON. É bastante poderoso, ele pode criar JSON a partir de coleções, objetos personalizados e funciona também vice-versa. É lançado sob a Licença Apache 2.0, para que você possa usá-lo também comercialmente.
http://code.google.com/p/google-gson/
fonte
Eu criei um projeto no Github Json2Java que faz isso. https://github.com/inder123/json2java
O Json2Java fornece personalizações, como renomear campos e criar hierarquias de herança.
Eu usei a ferramenta para criar algumas APIs relativamente complexas:
API TMS da Gracenote: https://github.com/inder123/gracenote-java-api
API de geocodificação do Google Maps: https://github.com/inder123/geocoding
fonte
Para adicionar à postagem de @ japher. Se você não está particularmente ligado ao JSON, vale a pena conferir os Buffers de Protocolo .
fonte
Experimente minha solução
http://htmlpreview.github.io/?https://raw.githubusercontent.com/foobnix/android-universal-utils/master/json/generator.html
Classe Java de resultado
JSONObject get
JSONObject put
fonte
Deixe-me mostrar como desenvolver a ferramenta. Você pode fazer isso:
Eu desenvolvo uma ferramenta para resolver o problema. É um projeto bem rápido e mais. pegue o código do meu github .
aproveite daqui, eu implantei no servidor web .
Eu tento a sugestão das 2 principais respostas. Uma web não pode abrir. Uma é mais lenta que a minha ferramenta. Espero que você goste da minha ferramenta.
fonte