En un proyecto Java Maven, ¿cómo se generan archivos fuente java desde JSON? Por ejemplo tenemos
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York"
}
}
Cuando corremos mvn generate-sources
queremos que genere algo como esto:
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 desarrollador de Java, ¿qué líneas de XML necesito escribir en mi pom.xml
para que esto suceda?
Respuestas:
Pruebe el complemento jsonschema2pojo :
Los
<sourceType>json</sourceType>
cubre el caso en que las fuentes son json (como la OP). Si tiene esquemas json reales , elimine esta línea.Actualizado en 2020. Han sucedido dos cosas desde diciembre de 2009 cuando se hizo esta pregunta:
La especificación del esquema JSON se ha movido mucho. Todavía está en borrador (no finalizado) pero está cerca de completarse y ahora es una herramienta viable que especifica sus reglas estructurales
Recientemente comencé un nuevo proyecto de código abierto destinado específicamente a resolver su problema: jsonschema2pojo . La herramienta jsonschema2pojo toma un documento de esquema json y genera clases Java de estilo DTO (en forma de archivos fuente .java). El proyecto aún no está maduro, pero ya proporciona cobertura de las partes más útiles del esquema json. Estoy buscando más comentarios de los usuarios para ayudar a impulsar el desarrollo. En este momento puede usar la herramienta desde la línea de comandos o como un complemento de Maven.
¡Espero que esto ayude!
fuente
Si está utilizando Jackson (la biblioteca más popular allí), intente
https://github.com/astav/JsonToJava
Es de código abierto y cualquiera debería poder contribuir.
Resumen
Un generador de archivos de clase fuente JsonToJava que deduce el esquema en base a los datos json de muestra suministrados y genera las estructuras de datos java necesarias.
Alienta a los equipos a pensar primero en Json, antes de escribir el código real.
Caracteristicas
fuente
Aquí hay una herramienta en línea que tomará JSON, incluidos objetos anidados o matrices anidadas de objetos y generará una fuente Java con anotaciones Jackson.
fuente
Respondiendo esta vieja pregunta con un proyecto reciente ;-).
Por el momento, la mejor solución es probablemente JsonSchema2Pojo :
Hace el trabajo desde el esquema Json raramente usado, pero también con Json simple. Proporciona el complemento Ant and Maven y una aplicación de prueba en línea puede darle una idea de la herramienta. Puse un Json Tweet y generé toda la clase que contiene (Tweet, Usuario, Ubicación, etc.).
Lo usaremos en el proyecto Agorava para generar mapeo de redes sociales y seguir la evolución del contenido en su API.
fuente
Gracias a todos los que intentaron ayudar.
Para mí, este script fue útil. Solo procesa JSON plano y no se ocupa de los tipos, sino que automatiza algunas rutinas
fuente
Soy consciente de que esta es una vieja pregunta, pero me la encontré mientras trataba de encontrar una respuesta.
La respuesta que menciona el generador json-pojo en línea (jsongen) es buena, pero necesitaba algo que pudiera ejecutar en la línea de comando y ajustar más.
Así que escribí un script ruby muy hacky para tomar un archivo JSON de muestra y generar POJO a partir de él. Tiene una serie de limitaciones (por ejemplo, no trata con campos que coinciden con palabras clave reservadas de Java) pero hace lo suficiente para muchos casos.
El código generado, por defecto, se anota para su uso con Jackson, pero esto se puede desactivar con un interruptor.
Puede encontrar el código en github: https://github.com/wotifgroup/json2pojo
fuente
Que yo sepa, no existe tal herramienta. Todavía.
Sospecho que la razón principal es que, a diferencia de XML (que tiene un esquema XML, y luego herramientas como 'xjc' para hacer lo que pides, entre las definiciones XML y POJO), no existe un lenguaje de esquema con todas las características. Existe el esquema JSON, pero tiene muy poco soporte para las definiciones de tipo reales (se centra en las estructuras JSON), por lo que sería complicado generar clases Java. Pero probablemente aún sea posible, especialmente. si se definieron algunas convenciones de nomenclatura y se utilizaron para admitir la generación.
Sin embargo: esto es algo que se ha solicitado con bastante frecuencia (en las listas de correo de los proyectos de herramientas JSON que sigo), por lo que creo que alguien escribirá dicha herramienta en un futuro próximo.
Por lo tanto, no creo que sea una mala idea per se (también: no es una buena idea para todos los casos de uso, depende de lo que quieras hacer).
fuente
Tuve el mismo problema, así que decidí comenzar a escribir una pequeña herramienta para ayudarme con esto. Voy a compartir y abrir el código fuente.
https://github.com/BrunoAlexandreMendesMartins/CleverModels
Es compatible con JAVA, C # y Objective-c de JSON.
¡Siéntase libre de contribuir!
fuente
También puedes probar la biblioteca GSON. Es bastante potente, puede crear JSON a partir de colecciones, objetos personalizados y funciona también viceversa. Se lanzó bajo la licencia Apache 2.0 para que pueda usarlo también comercialmente.
http://code.google.com/p/google-gson/
fuente
Creé un proyecto Github Json2Java que hace esto. https://github.com/inder123/json2java
Json2Java proporciona personalizaciones, como renombrar campos y crear jerarquías de herencia.
He usado la herramienta para crear algunas API relativamente complejas:
API TMS de Gracenote: https://github.com/inder123/gracenote-java-api
API de geocodificación de Google Maps: https://github.com/inder123/geocoding
fuente
Para agregar a la publicación de @ japher. Si no está particularmente vinculado a JSON, vale la pena echarle un vistazo a Protocol Buffers .
fuente
Prueba mi solución
http://htmlpreview.github.io/?https://raw.githubusercontent.com/foobnix/android-universal-utils/master/json/generator.html
Resultado Java Class
JSONObject get
JSONObject puesto
fuente
Déjame mostrarte cómo desarrollar la herramienta. Puedes hacerlo:
Dev una herramienta para resolver el problema. Está bien diseñado y más rápido. obtener el código de mi github .
disfrútenlo desde aquí, lo he implementado en el servidor web .
Intento la sugerencia de las 2 respuestas principales. Una web no se puede abrir. Una es más lenta que mi herramienta. Espero que disfruten de mi herramienta.
fuente