Dans un projet Java Maven, comment générer des fichiers source java à partir de JSON? Par exemple, nous avons
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York"
}
}
Lorsque nous courons, mvn generate-sources
nous voulons qu'il génère quelque chose comme ceci:
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"));
}
}
En tant que développeur Java, quelles lignes de XML dois-je écrire dans mon pom.xml
pour que cela se produise?
Réponses:
Essayez le plug-in jsonschema2pojo :
Le
<sourceType>json</sourceType>
couvre le cas où les sources sont json (comme l'OP). Si vous disposez de schémas json réels , supprimez cette ligne.Mis à jour en 2020. Deux choses se sont produites depuis décembre 2009 lorsque cette question a été posée:
La spécification du schéma JSON a beaucoup évolué. Il est toujours en projet (non finalisé) mais il est en voie d'achèvement et est désormais un outil viable précisant vos règles structurelles
J'ai récemment lancé un nouveau projet open source spécifiquement destiné à résoudre votre problème: jsonschema2pojo . L'outil jsonschema2pojo prend un document de schéma json et génère des classes Java de style DTO (sous la forme de fichiers source .java). Le projet n'est pas encore arrivé à maturité mais couvre déjà les parties les plus utiles du schéma json. Je recherche plus de commentaires des utilisateurs pour aider à conduire le développement. À l'heure actuelle, vous pouvez utiliser l'outil à partir de la ligne de commande ou en tant que plugin Maven.
J'espère que cela t'aides!
la source
Si vous utilisez Jackson (la bibliothèque la plus populaire là-bas), essayez
https://github.com/astav/JsonToJava
Son open source et n'importe qui devrait pouvoir contribuer.
Résumé
Un générateur de fichier de classe source JsonToJava qui déduit le schéma en fonction des exemples de données json fournies et génère les structures de données java nécessaires.
Il encourage les équipes à réfléchir en Json d'abord, avant d'écrire du code réel.
Caractéristiques
la source
Voici un outil en ligne qui prendra JSON, y compris des objets imbriqués ou des tableaux d'objets imbriqués et générera une source Java avec des annotations Jackson.
la source
Répondre à cette vieille question avec un projet récent ;-).
Pour le moment, la meilleure solution est probablement JsonSchema2Pojo :
Il fait le travail à partir du schéma Json rarement utilisé, mais aussi avec du Json ordinaire. Il fournit un plugin Ant et Maven et une application de test en ligne peut vous donner une idée de l'outil. J'ai mis un Tweet Json et généré toute la classe contenante (Tweet, User, Location, etc.).
Nous l'utiliserons sur le projet Agorava pour générer une cartographie des médias sociaux et suivre l'évolution du continent dans leur API.
la source
Merci à tous ceux qui ont essayé d'aider.
Pour moi, ce script a été utile. Il ne traite que du JSON plat et ne prend pas en charge les types, mais automatise certaines routines
la source
Je sais que c'est une vieille question, mais je suis tombée dessus tout en essayant de trouver une réponse moi-même.
La réponse qui mentionne le générateur en ligne json-pojo (jsongen) est bonne, mais j'avais besoin de quelque chose que je pourrais exécuter sur la ligne de commande et modifier davantage.
J'ai donc écrit un script rubis très hacky pour prendre un exemple de fichier JSON et générer des POJO à partir de celui-ci. Il a un certain nombre de limitations (par exemple, il ne traite pas des champs qui correspondent aux mots clés réservés java) mais il en fait assez pour de nombreux cas.
Le code généré, par défaut, annote pour une utilisation avec Jackson, mais cela peut être désactivé avec un commutateur.
Vous pouvez trouver le code sur github: https://github.com/wotifgroup/json2pojo
la source
Autant que je sache, il n'y a pas un tel outil. Encore.
La raison principale est, je suppose, que contrairement à XML (qui a un schéma XML, puis des outils comme 'xjc' pour faire ce que vous demandez, entre les définitions XML et POJO), il n'y a pas de langage de schéma entièrement fonctionnel. Il existe un schéma JSON, mais il prend très peu en charge les définitions de type réelles (se concentre sur les structures JSON), il serait donc difficile de générer des classes Java. Mais probablement toujours possible, esp. si certaines conventions de dénomination ont été définies et utilisées pour prendre en charge la génération.
Cependant: c'est quelque chose qui a été assez fréquemment demandé (sur les listes de diffusion des projets d'outils JSON que je suis), donc je pense que quelqu'un va écrire un tel outil dans un avenir proche.
Je ne pense donc pas que ce soit une mauvaise idée en soi (aussi: ce n'est pas une bonne idée pour tous les cas d'utilisation, cela dépend de ce que vous voulez faire).
la source
J'ai eu le même problème alors j'ai décidé de commencer à écrire un petit outil pour m'aider. Je vais partager et ouvrir la source.
https://github.com/BrunoAlexandreMendesMartins/CleverModels
Il prend en charge JAVA, C # et Objective-c de JSON.
N'hésitez pas à contribuer!
la source
Vous pouvez également essayer la bibliothèque GSON. Son assez puissant, il peut créer du JSON à partir de collections, d'objets personnalisés et fonctionne également vice versa. Il est publié sous Apache License 2.0 afin que vous puissiez également l'utiliser commercialement.
http://code.google.com/p/google-gson/
la source
J'ai créé un projet github Json2Java qui fait cela. https://github.com/inder123/json2java
Json2Java fournit des personnalisations telles que renommer des champs et créer des hiérarchies d'héritage.
J'ai utilisé l'outil pour créer des API relativement complexes:
API TMS de Gracenote: https://github.com/inder123/gracenote-java-api
API de géocodage de Google Maps: https://github.com/inder123/geocoding
la source
Pour ajouter au message de @ japher. Si vous n'êtes pas particulièrement lié à JSON, les tampons de protocole méritent d'être vérifiés.
la source
Essayez ma solution
http://htmlpreview.github.io/?https://raw.githubusercontent.com/foobnix/android-universal-utils/master/json/generator.html
Résultat classe Java
JSONObject get
JSONObject put
la source
Permettez-moi de vous montrer comment développer l'outil. Vous pouvez le faire:
Je dev un outil pour résoudre le problème.il est bien conçu et plus rapide. obtenir le code de mon github .
profiter d'ici, je l'ai déployé sur le serveur web .
J'essaye la suggestion de la réponse du top 2. Un web ne peut pas s'ouvrir. Un est plus lent que mon outil. J'espère que vous apprécierez mon outil.
la source