Wie generieren Sie in einem Java Maven-Projekt Java-Quelldateien aus JSON? Zum Beispiel haben wir
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York"
}
}
Wenn wir laufen mvn generate-sources
, wollen wir, dass es so etwas erzeugt:
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"));
}
}
Welche XML-Zeilen muss ich als Java-Entwickler in meine schreiben pom.xml
, um dies zu erreichen?
Antworten:
Probieren Sie das Plug-In jsonschema2pojo aus:
Das
<sourceType>json</sourceType>
deckt den Fall ab, in dem die Quellen json sind (wie das OP). Wenn Sie aktuelle JSON- Schemas haben , entfernen Sie diese Zeile.Aktualisiert im Jahr 2020. Zwei Dinge sind seit Dezember '09 passiert, als diese Frage gestellt wurde:
Die JSON-Schemaspezifikation hat sich stark weiterentwickelt. Es befindet sich noch im Entwurf (noch nicht fertiggestellt), steht jedoch kurz vor dem Abschluss und ist jetzt ein praktikables Werkzeug zur Festlegung Ihrer Strukturregeln
Ich habe kürzlich ein neues Open Source-Projekt gestartet, das speziell zur Lösung Ihres Problems gedacht ist : jsonschema2pojo . Das Tool jsonschema2pojo verwendet ein JSON-Schemadokument und generiert Java-Klassen im DTO-Stil (in Form von Java-Quelldateien). Das Projekt ist noch nicht ausgereift, deckt jedoch bereits die nützlichsten Teile des JSON-Schemas ab. Ich suche nach mehr Feedback von Benutzern, um die Entwicklung voranzutreiben. Im Moment können Sie das Tool über die Befehlszeile oder als Maven-Plugin verwenden.
Hoffe das hilft!
quelle
Wenn Sie Jackson (die beliebteste Bibliothek dort) verwenden, versuchen Sie es
https://github.com/astav/JsonToJava
Es ist Open Source und jeder sollte dazu beitragen können.
Zusammenfassung
Ein JsonToJava-Quellklassendateigenerator, der das Schema basierend auf den bereitgestellten Json-Beispieldaten ableitet und die erforderlichen Java-Datenstrukturen generiert.
Es ermutigt die Teams, zuerst in Json zu denken, bevor sie den eigentlichen Code schreiben.
Eigenschaften
quelle
Hier ist ein Online-Tool , das JSON verwendet, einschließlich verschachtelter Objekte oder verschachtelter Arrays von Objekten, und eine Java-Quelle mit Jackson-Annotationen generiert.
quelle
Beantwortung dieser alten Frage mit aktuellem Projekt ;-).
Im Moment ist die beste Lösung wahrscheinlich JsonSchema2Pojo :
Es erledigt die Arbeit mit dem selten verwendeten Json-Schema, aber auch mit einfachem Json. Es enthält das Ant and Maven-Plugin und eine Online-Testanwendung kann Ihnen einen Eindruck vom Tool vermitteln. Ich habe einen Json-Tweet eingefügt und die gesamte enthaltende Klasse (Tweet, Benutzer, Speicherort usw.) generiert.
Wir werden es im Agorava- Projekt verwenden, um Social Media-Mapping zu generieren und die Contant-Entwicklung in ihrer API zu verfolgen.
quelle
Vielen Dank an alle, die versucht haben zu helfen.
Für mich war dieses Skript hilfreich. Es verarbeitet nur flaches JSON und kümmert sich nicht um Typen, sondern automatisiert einige Routinen
quelle
Ich bin mir bewusst, dass dies eine alte Frage ist, aber ich bin darauf gestoßen, als ich versucht habe, selbst eine Antwort zu finden.
Die Antwort, in der der Online-Generator json-pojo (jsongen) erwähnt wird, ist gut, aber ich brauchte etwas, das ich über die Befehlszeile ausführen und mehr optimieren konnte.
Also habe ich ein sehr hackiges Ruby-Skript geschrieben, um eine JSON-Beispieldatei zu nehmen und daraus POJOs zu generieren. Es gibt eine Reihe von Einschränkungen (z. B. werden keine Felder behandelt, die mit von Java reservierten Schlüsselwörtern übereinstimmen), aber es reicht für viele Fälle aus.
Der standardmäßig generierte Code enthält Anmerkungen zur Verwendung mit Jackson, kann jedoch mit einem Schalter deaktiviert werden.
Sie finden den Code auf github: https://github.com/wotifgroup/json2pojo
quelle
Soweit ich weiß, gibt es kein solches Werkzeug. Noch.
Ich vermute, der Hauptgrund ist, dass es im Gegensatz zu XML (mit XML-Schema und Tools wie 'xjc', um das zu tun, was Sie verlangen, zwischen XML- und POJO-Definitionen) keine Schemasprache mit allen Funktionen gibt. Es gibt ein JSON-Schema, das jedoch die tatsächlichen Typdefinitionen kaum unterstützt (konzentriert sich auf JSON-Strukturen). Daher wäre es schwierig, Java-Klassen zu generieren. Aber wahrscheinlich noch möglich, insb. wenn einige Namenskonventionen definiert und zur Unterstützung der Generierung verwendet wurden.
Allerdings: Dies wurde ziemlich häufig angefordert (auf Mailinglisten von JSON-Toolprojekten, denen ich folge), daher denke ich, dass jemand in naher Zukunft ein solches Tool schreiben wird.
Ich denke also nicht, dass es per se eine schlechte Idee ist (auch: Es ist nicht für alle Anwendungsfälle eine gute Idee, hängt davon ab, was Sie tun möchten).
quelle
Ich hatte das gleiche Problem und beschloss, ein kleines Tool zu schreiben, um mir dabei zu helfen. Ich werde es teilen und Open Source.
https://github.com/BrunoAlexandreMendesMartins/CleverModels
Es unterstützt JAVA, C # und Objective-c von JSON.
Fühlen Sie sich frei, einen Beitrag zu leisten!
quelle
Sie können auch die GSON-Bibliothek ausprobieren. Es ist ziemlich leistungsfähig und kann JSON aus Sammlungen, benutzerdefinierten Objekten erstellen und funktioniert auch umgekehrt. Es wurde unter Apache License 2.0 veröffentlicht, sodass Sie es auch kommerziell nutzen können.
http://code.google.com/p/google-gson/
quelle
Ich habe ein Github-Projekt Json2Java erstellt, das dies tut. https://github.com/inder123/json2java
Json2Java bietet Anpassungen wie das Umbenennen von Feldern und das Erstellen von Vererbungshierarchien.
Ich habe das Tool verwendet, um einige relativ komplexe APIs zu erstellen:
TMS-API von Gracenote: https://github.com/inder123/gracenote-java-api
Google Maps Geocoding API: https://github.com/inder123/geocoding
quelle
Zum Beitrag von @ japher hinzufügen. Wenn Sie nicht besonders an JSON gebunden sind, sollten Sie sich die Protokollpuffer ansehen .
quelle
Probieren Sie meine Lösung aus
http://htmlpreview.github.io/?https://raw.githubusercontent.com/foobnix/android-universal-utils/master/json/generator.html
Ergebnis Java Class
JSONObject bekommen
JSONObject setzen
quelle
Lassen Sie mich Ihnen zeigen, wie Sie das Tool entwickeln. Sie können dies tun:
Ich entwickle ein Tool, um das Problem zu lösen. Es ist gut gestaltet und schnell mehr. Holen Sie sich den Code von meinem Github .
genieße es von hier aus, ich habe es auf dem Webserver bereitgestellt .
Ich versuche den Vorschlag der Top-2-Antwort. Ein Web kann nicht geöffnet werden. Eines ist langsamer als mein Tool. Ich hoffe, Sie werden mein Tool genießen.
quelle