Générer une classe Java à partir de JSON?

Je veux un utilitaire qui génère des fichiers source Java à partir de JSON. Par exemple, nous avons

{ "firstName": "John", "lastName": "Smith", "address": { "streetAddress": "21 2nd Street", "city": "New York" } } 

Nous transmettons ceci à l’utilitaire et nous voulons qu’il génère quelque chose comme ceci:

 class Address { JSONObject mInternalJSONObject; Address (JSONObject json){ mInternalJSONObject = json; } Ssortingng getStreetAddress () { return mInternalJSONObject.getSsortingng("streetAddress"); } Ssortingng getCity (){ return mInternalJSONObject.getSsortingng("city"); } } class Person { JSONObject mInternalJSONObject; Person (JSONObject json){ mInternalJSONObject = json; } Ssortingng getFirstName () { return mInternalJSONObject.getSsortingng("firstName"); } Ssortingng getLastName (){ return mInternalJSONObject.getSsortingng("lastName"); } Address getAddress (){ return Address(mInternalJSONObject.getSsortingng("address")); } } 

Pas si difficile d’écrire, mais je suis sûr que quelqu’un l’a déjà fait.

Essayer:

http://www.jsonschema2pojo.org

Orsol, je suis sûr que vous n’attendez toujours pas une solution ici, mais au nom de la prochaine personne qui a trouvé ce sujet, j’ai pensé que j’appendais plus d’informations.

Depuis décembre 2009, deux questions se sont posées:

  • La spécification JSON Schema a beaucoup évolué. Il est toujours en cours de rédaction (non finalisé) mais il est presque achevé et constitue désormais un outil viable précisant vos règles structurelles.

  • J’ai récemment lancé un nouveau projet open source spécifiquement conçu pour 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 il couvre déjà les parties les plus utiles du schéma json. Je recherche plus de commentaires de la part des utilisateurs pour consortingbuer au développement. En ce moment, vous pouvez utiliser l’outil depuis 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), essayez

https://github.com/astav/JsonToJava

Son open source et tout le monde devrait pouvoir consortingbuer.

Résumé

Un générateur de fichiers de classe source JsonToJava qui déduit le schéma en fonction des données json fournies et génère les structures de données Java nécessaires.

Il encourage les équipes à penser en premier à Json avant d’écrire le code actuel.

Caractéristiques

  • Peut générer des classes pour une hiérarchie arbitrairement complexe (récursivement)
  • Peut lire vos classes Java existantes et si elle peut désérialiser dans ces structures, le fera
  • Invitera l’utilisateur à saisir des cas ambigus

Il ne semble pas que JSON Gen (la réponse acceptée) ait été mis à jour depuis un certain temps. http://javafromjson.dashingrocket.com semble bon, bien que

Voici un outil en ligne qui prendra JSON, y compris les objects nesteds ou les tableaux nesteds d’objects et générera une source Java avec des annotations Jackson.

Répondre à cette ancienne question avec un projet récent ;-).

À l’heure actuelle, la meilleure solution est probablement JsonSchema2Pojo :

Il fait le travail du schéma Json rarement utilisé mais aussi de plain Json. Il fournit les plug-ins Ant et Maven et une application de test en ligne peut vous donner une idée de l’outil. Je mets un tweet Json et généré toute la classe contenant (Tweet, User, Location, etc.).

Nous allons l’utiliser sur le projet Agorava pour générer le mappage des médias sociaux et suivre l’évolution de leur API.

Merci à tous ceux qui ont essayé d’aider.
Pour moi, ce script était utile. Il ne traite que du JSON plat et ne prend pas en charge les types, mais automatise certaines routines

  Ssortingng 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 iterator = json.keys(); System.out.println("Fields:"); while (iterator.hasNext() ){ System.out.println(Ssortingng.format("public Ssortingng %s;", iterator.next())); } System.out.println("public void Parse (Ssortingng str){"); System.out.println("JSONObject json = new JSONObject(str);"); iterator = json.keys(); while (iterator.hasNext() ){ Ssortingng key = iterator.next(); System.out.println(Ssortingng.format("this.%s = json.getSsortingng(\"%s\");",key,key )); System.out.println("}"); 

Je sais que c’est une vieille question, mais je suis tombé dessus en essayant de trouver une réponse moi-même.

La réponse qui mentionne le générateur de json-pojo en ligne (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 Ruby très pirate pour prendre un exemple de fichier JSON et en générer des POJO. 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

Pour autant que je sache, il n’y a pas un tel outil. Encore.

Je pense que la raison principale est 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’existe pas de langage de schéma complet. 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 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é demandé assez fréquemment (sur les listes de diffusion des projets JSON que je suis), donc je pense que quelqu’un va écrire un tel outil dans un futur proche.

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, j’ai donc décidé de commencer à écrire un petit outil pour m’aider avec ça. Je vais partager et ouvrir le source.

https://github.com/BrunoAlexandreMendesMartins/CleverModels

Il supporte JAVA, C # et Objective-c de JSON.

N’hésitez pas à consortingbuer!

J’ai créé un projet github Json2Java qui le fait. https://github.com/inder123/json2java

Json2Java fournit des personnalisations telles que le renommage des champs et la création de hiérarchies d’inheritance.

J’ai utilisé l’outil pour créer des API relativement complexes:

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

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

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.

Vous pouvez également essayer la bibliothèque GSON. Il est assez puissant, il peut créer JSON à partir de collections, d’objects personnalisés et fonctionne également vice versa. Il est publié sous licence Apache 2.0, vous pouvez donc l’utiliser également dans le commerce.

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

Permettez-moi de vous montrer comment développer l’outil. Vous pouvez le faire:

  1. fonction javascript utilisateur Json.parse (), créer une chaîne comme-json trans vers l’object js
  2. utilisez ensuite cet object pour générer le format javabean.
  3. quelque chose que vous feriez attention. (1) le mappage de type de valeur, par exemple, comment comprendre la chaîne, est le type de date. (2) loweser_case to camelCase

Je dev un outil résoudre le problem.it est bien design et rapide plus. obtenir le code de mon github .

Profitez-en d’ici, je l’ai déployé sur le serveur Web .

J’essaie la suggestion de la réponse 2 top.one web est ne peut pas ouvrir.un est plus lent que mon tool.hope vous apprécierez mon outil.

Essayez ma solution

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

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

Classe Java de résultat

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

JSONObject get

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

JSONObject mis

 obj.put("auctionHouse",auctionHouse); obj.put("bidDate",bidDate); obj.put("bidPrice",bidPrice); obj.put("bidPrice1",bidPrice1); obj.put("isYear",isYear);