Je veux un utilitaire qui génère Java fichiers source à partir de JSON. Par exemple nous avons
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York"
}
}
Nous passons ceci à l'utilitaire et 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"));
}
}
Pas si difficile à écrire, mais je suis sûr que quelqu'un l'a déjà fait.
Essayer:
Orsol, je suis sûr que vous n'attendez toujours pas de solution, mais par souci de la prochaine personne qui trouve ce fil, j'ai pensé ajouter quelques informations supplémentaires.
Deux choses se sont passées depuis le mois de décembre 2009, lorsque cette question a été posée:
JSON Schema spec a beaucoup évolué. Il est toujours en projet (non finalisé) mais il est presque terminé et constitue désormais un outil viable spécifiant 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 sources .Java). Le projet n’est pas encore au point mais il couvre déjà les parties les plus utiles du schéma json. Je cherche 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 plug-in Maven.
J'espère que cela t'aides!
Si vous utilisez Jackson (la bibliothèque la plus populaire du pays), essayez
https://github.com/astav/JsonToJava
Son source ouverte et tout le monde 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 fournis et génère les structures de données nécessaires Java.
Cela encourage les équipes à penser à Json avant d’écrire du code.
Caractéristiques
Voici un outil en ligne qui utilisera JSON, y compris des objets imbriqués ou des tableaux imbriqués, et générera une source Java avec des annotations de Jackson.
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 Json brut. Il fournit les plugins Ant et Maven et un 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, Utilisateur, Emplacement, etc.).
Nous l'utilisons sur le projet Agorava pour générer un mappage des médias sociaux et suivre l'évolution constante de leur API.
Je suis conscient que c'est une vieille question, mais je suis tombé dessus en essayant de trouver moi-même une réponse.
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 très compliqué Ruby pour extraire un exemple de fichier JSON et en générer des POJO. Il comporte un certain nombre de limitations (par exemple, il ne traite pas les champs qui correspondent aux mots clés réservés Java), mais il en fait assez dans de nombreux cas.
Le code généré par défaut est annoté pour être utilisé avec Jackson, mais cela peut être désactivé avec un commutateur.
Vous pouvez trouver le code sur github: https://github.com/wotifgroup/json2pojo
Merci à tous ceux qui ont essayé d'aider.
Pour moi, ce script a été utile. Il traite uniquement les fichiers JSON à plat et ne prend pas en charge les types, mais automatise certaines tâches de routine.
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("}");
Pour autant que je sache, un tel outil n'existe pas. Encore.
Je suppose que la principale raison est que, contrairement à XML (qui a un schéma XML, puis des outils tels que 'xjc' pour faire ce que vous demandez, entre les définitions XML et POJO), il n’existe pas de langage de schéma à fonctionnalités complètes. Il existe un schéma JSON, mais il prend très peu en charge les définitions de type réelles (il se concentre sur les structures JSON). Il serait donc difficile de générer des classes Java. Mais probablement encore 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), je pense donc que quelqu'un écrira un tel outil dans un proche avenir.
Donc, je ne pense 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).
J'ai eu le même problème alors j'ai décidé de commencer à écrire un petit outil pour m'aider avec cela. Je vais partager andopen source il.
https://github.com/BrunoAlexandreMendesMartins/CleverModels
Il supporte, Java, C # et Objective-C de JSON.
N'hésitez pas à contribuer!
Vous pouvez également essayer la bibliothèque GSON. Son assez puissant, il peut créer JSON à partir de collections, objets personnalisés et fonctionne également vice versa. Son publié sous Apache License 2.0 afin que vous puissiez l'utiliser également dans le commerce.
J'ai créé un projet github Json2Java qui fait cela. https://github.com/inder123/json2Java
Json2Java fournit des personnalisations telles que le changement de nom de champs et la création de 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
Essayez ma solution
{
"auctionHouse": "sample string 1",
"bidDate": "2014-05-30T08:20:38.5426521-04:00 ",
"bidPrice": 3,
"bidPrice1": 3.1,
"isYear":true
}
Résultat Java Classe
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);
Laissez-moi vous montrer comment développer l'outil.Vous pouvez le faire:
Je dev un outil résoudre le problème.il est bien design et rapide plus. récupère le code de mon github .
profiter à partir d'ici, je l'ai déployer sur webserver .
J'essaie la suggestion du top 2 de la réponse. Un site Web ne peut pas s'ouvrir. L'un est plus lent que mon outil. J'espère que vous apprécierez mon outil.
Ajouter au message de @ japher. Si vous n'êtes pas particulièrement lié au JSON, tampons de protocole vaut la peine d'être vérifié.