Gerar a classe Java do JSON? [fechado]

quero um utilitário que gera ficheiros java fonte a partir do JSON. Por exemplo, temos

{
  "firstName": "John",  
  "lastName": "Smith",  
  "address": {  
    "streetAddress": "21 2nd Street",  
     "city": "New York"
  }
}
Passamos isto para o Utilitário e queremos que gere algo assim.
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"));
    }
}
Não é difícil de escrever, mas tenho a certeza que alguém já o fez.

 177
Author: Verhagen, 2009-12-24

14 answers

Tenta:

Http://www.jsonschema2pojo.org

Orsol, tenho a certeza que ainda não estás à espera de uma solução, mas para o bem da próxima pessoa que encontrar este tópico, pensei em adicionar mais informações. Duas coisas aconteceram desde dezembro de 2009, quando esta pergunta foi feita:
  • O esquema de JSON mudou-se muito. Ainda está em projecto (não finalizado), mas está perto de ser concluído e é agora uma ferramenta viável especificando o seu regras estruturais

  • Eu comecei recentemente um novo projeto open source especificamente destinado a resolver o seu problema: jsonschema2pojo . A ferramenta jsonschema2pojo possui um documento json schema e gera classes Java de estilo DTO (na forma de .java source files). O projeto ainda não está maduro, mas já fornece cobertura das partes mais úteis do json schema. Estou à procura de mais feedback dos usuários para ajudar a impulsionar o desenvolvimento. Neste momento você pode usar a ferramenta de a linha de comandos ou como um plugin Maven.

Espero que isto ajude!
 224
Author: joelittlejohn, 2014-03-05 20:40:56

Se você está usando Jackson (a biblioteca mais popular lá), tente

Https://github.com/astav/JsonToJava

O seu código aberto e qualquer um deve ser capaz de contribuir.

Resumo

Um gerador de ficheiros de classe fonte JsonToJava que deduz o esquema com base na amostra de dados JSON fornecida e gera as estruturas de dados java necessárias.

Encoraja as equipas a pensar em Json primeiro, antes de escreverem codigo.

Características

  • pode gerar classes para uma hierarquia arbitrariamente complexa (recursivamente)
  • pode ler as suas classes Java existentes e se puder deserializar-se nessas estruturas, fá-lo-á
  • irá pedir a entrada do utilizador quando existirem casos ambíguos
 17
Author: Astav, 2017-05-30 07:51:34
Não parece que o JSON Gen (a resposta aceite) tenha sido actualizado há algum tempo. http://javafromjson.dashingrocket.com parece bom, no entanto
 12
Author: jessebs, 2014-04-27 19:02:42

Responder a esta velha pergunta com um projecto recente; -).

Neste momento, a melhor solução é provavelmente o JsonSchema2Pojo. : Faz o trabalho a partir do esquema JSON raramente usado, mas também com Json puro. Ele fornece plugin Ant e Maven e um Aplicação de teste online pode dar-lhe uma ideia da ferramenta. Eu coloquei um Tweet Json e gerei toda a classe contendo (Tweet, Usuário, localização, etc..). Vamos usá-lo no projecto Agorava {[5] } para gerar As mídias sociais mapeiam e seguem a evolução contante em sua API.
 6
Author: Antoine Sabot-Durand, 2014-06-24 22:40:39
Obrigado a todos os que tentaram ajudar.Para mim, este guião ajudou. Ele processa apenas JSON plano e não cuidar dos tipos, mas automatizar alguma rotina
  String str = 
        "{"
            + "'title': 'Computing and Information systems',"
            + "'id' : 1,"
            + "'children' : 'true',"
            + "'groups' : [{"
                + "'title' : 'Level one CIS',"
                + "'id' : 2,"
                + "'children' : 'true',"
                + "'groups' : [{"
                    + "'title' : 'Intro To Computing and Internet',"
                    + "'id' : 3,"
                    + "'children': 'false',"
                    + "'groups':[]"
                + "}]" 
            + "}]"
        + "}";



    JSONObject json = new JSONObject(str);
    Iterator<String> iterator =  json.keys();

    System.out.println("Fields:");
    while (iterator.hasNext() ){
       System.out.println(String.format("public String %s;", iterator.next()));
    }

    System.out.println("public void Parse (String str){");
    System.out.println("JSONObject json = new JSONObject(str);");

    iterator  = json.keys();
    while (iterator.hasNext() ){
       String key = iterator.next();
       System.out.println(String.format("this.%s = json.getString(\"%s\");",key,key ));

    System.out.println("}");
 4
Author: Denis Palnitsky, 2009-12-25 09:23:21
Sei que esta é uma pergunta antiga, mas deparei-me com ela ao tentar encontrar uma resposta. A resposta que menciona o gerador JSON-pojo online (jsongen) é boa, mas eu precisava de algo que pudesse correr na linha de comando e ajustar mais. Então eu escrevi um script muito hacky ruby para pegar uma amostra de arquivo JSON e gerar POJOs a partir dele. Ele tem uma série de limitações (por exemplo, ele não lida com campos que correspondem a palavras-chave reservadas java), mas ele faz o suficiente para muitos casos.

O código gerado, por padrão, anota para uso com Jackson, mas isto pode ser desligado com um interruptor.

Podes encontrar o código no github: https://github.com/wotifgroup/json2pojo

 4
Author: Chris R, 2011-12-21 05:25:20
Tanto quanto sei, não existe tal ferramenta. Ainda.

A principal razão é, eu suspeito, que ao contrário do XML (que tem esquema XML, e então ferramentas como 'xjc' para fazer o que você pede, entre definições XML e POJO), não existe linguagem de esquema de funcionalidades completas. Existe o JSON Schema, mas ele tem muito pouco suporte para definições de tipo reais (foca em estruturas JSON), então seria complicado gerar classes Java. Mas provavelmente ainda é possível, esp. se algumas convenções de nomes fossem definido e usado para suportar a geração.

No entanto: isto é algo que tem sido pedido com bastante frequência( em listas de discussão de projetos de ferramentas JSON que eu sigo), então eu acho que alguém vai escrever tal ferramenta em um futuro próximo.

Então eu não acho que seja uma má idéia per se (também: não é uma boa idéia para todos os casos de uso, depende do que você quer fazer ).

 2
Author: StaxMan, 2010-01-10 23:24:57
Tive o mesmo problema, por isso decidi começar a escrever uma pequena ferramenta para me ajudar com isto. Vou partilhar e abrir a fonte.

Https://github.com/BrunoAlexandreMendesMartins/CleverModels

Suporta JAVA, C# & Objective-c do JSON .

Sinta-se à vontade para contribuir!
 2
Author: bmartins, 2012-06-19 12:38:45
Criei um projecto github Json2Java que faz isto. https://github.com/inder123/json2java

Json2Java fornece personalizações como renomear campos, e criar hierarquias de herança.

Usei a ferramenta para criar algumas APIs relativamente complexas:

API do Gracenote: https://github.com/inder123/gracenote-java-api

API do Google Maps Geocoding: https://github.com/inder123/geocoding

 1
Author: inder, 2015-03-14 19:34:03

Para adicionar ao posto de @japher. Se não estiver particularmente ligado ao JSON, valerá a pena verificar os Buffers de Protocolo .

 0
Author: dgorissen, 2011-02-23 14:08:53
Também podes tentar a biblioteca GSON. É bastante poderoso que pode criar JSON a partir de coleções, objetos personalizados e funciona também vice-versa. É lançado sob licença Apache 2.0 para que você possa usá-lo também comercialmente.

Http://code.google.com/p/google-gson/

 0
Author: MB.One, 2012-10-18 08:40:20
Deixa-me mostrar-te como devorar a ferramenta.você pode fazer isso:
  1. Utilizador da função javascript Json.parse (), make string like-json trans to js object
  2. então use este objeto para genrar o formato javabean.
  3. Algo que te importa.(1) mapeamento de tipo de valor,por exemplo,como descobrir a cadeia,é tipo de data.(2)Processo loweser_case to camelCase
Tenho uma ferramenta para resolver o problema. problem.it é bem design e rápido mais. obter o código do meu github .

Aproveite a partir daqui, eu tenho implantá-lo em servidor web .

Eu tento a sugestão da resposta do top 2.uma web é não pode abrir.uma é mais lenta que a minha ferramenta.espero que gostem da minha ferramenta.
 0
Author: lizeyang, 2015-06-18 06:31:10

Tenta a minha solução.

Http://htmlpreview.github.io/?https://raw.githubusercontent.com/foobnix/android-universal-utils/master/json/generator.html

{
    "auctionHouse": "sample string 1",
    "bidDate": "2014-05-30T08:20:38.5426521-04:00 ",
    "bidPrice": 3,
    "bidPrice1": 3.1,
    "isYear":true
}

Classe Java Resultado

private String  auctionHouse;
private Date  bidDate;
private int  bidPrice;
private double  bidPrice1;
private boolean  isYear;

JSONObject get

auctionHouse = obj.getString("auctionHouse");
bidDate = obj.opt("bidDate");
bidPrice = obj.getInt("bidPrice");
bidPrice1 = obj.getDouble("bidPrice1");
isYear = obj.getBoolean("isYear");

JSONObject put

obj.put("auctionHouse",auctionHouse);
obj.put("bidDate",bidDate);
obj.put("bidPrice",bidPrice);
obj.put("bidPrice1",bidPrice1);
obj.put("isYear",isYear);
 -1
Author: Foobnix, 2014-11-05 12:11:45