Jak w projekcie Java Maven generujesz pliki źródłowe Java z JSON? Na przykład mamy
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York"
}
}
Po uruchomieniu mvn generate-sources
chcemy, aby wygenerowało coś takiego:
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"));
}
}
Jako programista Java, jakie wiersze XML muszę napisać pom.xml
, aby tak się stało?
Odpowiedzi:
Wypróbuj wtyczkę jsonschema2pojo :
W
<sourceType>json</sourceType>
dotyczy przypadku, w którym źródła są json (jak PO). Jeśli masz rzeczywiste schematy Json , usuń tę linię.Zaktualizowano w 2020 r. Dwie rzeczy wydarzyły się od grudnia 2009 r., Kiedy zadano to pytanie:
Specyfikacja schematu JSON bardzo się zmieniła. Nadal jest w wersji roboczej (nie sfinalizowanej), ale jest prawie gotowy do ukończenia i jest teraz realnym narzędziem określającym twoje zasady strukturalne
Niedawno rozpocząłem nowy projekt open source, którego celem jest rozwiązanie twojego problemu: jsonschema2pojo . Narzędzie jsonschema2pojo pobiera dokument schematu json i generuje klasy Java w stylu DTO (w postaci plików źródłowych .java). Projekt nie jest jeszcze dojrzały, ale już zapewnia pokrycie najbardziej użytecznych części schematu json. Szukam więcej opinii od użytkowników, aby pomóc w rozwoju. W tej chwili możesz używać narzędzia z wiersza poleceń lub jako wtyczki Maven.
Mam nadzieję że to pomoże!
źródło
Jeśli używasz Jacksona (najpopularniejszej biblioteki), spróbuj
https://github.com/astav/JsonToJava
Jest to oprogramowanie typu open source i każdy powinien mieć możliwość wniesienia wkładu.
Podsumowanie
Generator plików klas źródłowych JsonToJava, który dedukuje schemat na podstawie dostarczonych przykładowych danych Json i generuje niezbędne struktury danych Java.
Zachęca zespoły do myślenia w Jsonie, a dopiero potem do napisania właściwego kodu.
cechy
źródło
Oto narzędzie online, które pobierze JSON, w tym zagnieżdżone obiekty lub zagnieżdżone tablice obiektów i wygeneruje źródło Java z adnotacjami Jacksona.
źródło
Odpowiadając na to stare pytanie w ostatnim projekcie ;-).
W tej chwili najlepszym rozwiązaniem jest prawdopodobnie JsonSchema2Pojo :
Robi to zadanie od rzadko używanego schematu Jsona, ale także ze zwykłym Jsonem. Zapewnia wtyczkę Ant i Maven, a aplikacja testowa online może dać ci wyobrażenie o narzędziu. Wstawiłem Json Tweet i wygenerowałem całą zawartą w nim klasę (Tweet, Użytkownik, Lokalizacja itp.).
Wykorzystamy go w projekcie Agorava do wygenerowania mapowania mediów społecznościowych i śledzenia ciągłej ewolucji ich interfejsu API.
źródło
Dziękuję wszystkim, którzy próbowali pomóc.
Dla mnie ten skrypt był pomocny. Przetwarza tylko płaskie JSON i nie zajmuje się typami, ale automatyzuje niektóre rutyny
źródło
Wiem, że to stare pytanie, ale natknąłem się na nie, próbując samemu znaleźć odpowiedź.
Odpowiedź, która wspomina o internetowym generatorze json-pojo (jsongen), jest dobra, ale potrzebowałem czegoś, co mógłbym uruchomić w wierszu poleceń i poprawić.
Napisałem więc bardzo zepsuty skrypt ruby, aby pobrać przykładowy plik JSON i wygenerować z niego POJO. Ma wiele ograniczeń (na przykład nie obsługuje pól pasujących do słów kluczowych zarezerwowanych dla języka Java), ale wystarcza w wielu przypadkach.
Generowany kod domyślnie zawiera adnotacje do użycia z Jacksonem, ale można to wyłączyć za pomocą przełącznika.
Możesz znaleźć kod na github: https://github.com/wotifgroup/json2pojo
źródło
O ile mi wiadomo, nie ma takiego narzędzia. Jeszcze.
Podejrzewam, że głównym powodem jest to, że w przeciwieństwie do XML (który ma schemat XML, a następnie narzędzia takie jak „xjc” do robienia tego, o co prosisz, pomiędzy definicjami XML i POJO), nie ma w pełni funkcjonalnego języka schematu. Istnieje schemat JSON, ale ma on bardzo małe wsparcie dla rzeczywistych definicji typów (koncentruje się na strukturach JSON), więc wygenerowanie klas Java byłoby trudne. Ale prawdopodobnie nadal możliwe, zwłaszcza. jeśli niektóre konwencje nazewnictwa zostały zdefiniowane i wykorzystane do obsługi generowania.
Jednak: jest to coś, o co dość często proszono (na listach mailingowych projektów narzędzi JSON, które obserwuję), więc myślę, że ktoś napisze takie narzędzie w najbliższej przyszłości.
Nie sądzę więc, aby sam był to zły pomysł (również: nie jest to dobry pomysł dla wszystkich przypadków użycia, zależy od tego, co chcesz zrobić).
źródło
Miałem ten sam problem, więc postanowiłem napisać małe narzędzie, które mi w tym pomoże. Zamierzam udostępnić to źródło.
https://github.com/BrunoAlexandreMendesMartins/CleverModels
Obsługuje JAVA, C # i Object-c z JSON.
Zapraszamy do współpracy!
źródło
Możesz także wypróbować bibliotekę GSON. Jest dość potężny, że może tworzyć JSON ze zbiorów, obiektów niestandardowych i działa również na odwrót. Jest wydany na licencji Apache License 2.0, dzięki czemu można go również używać komercyjnie.
http://code.google.com/p/google-gson/
źródło
Stworzyłem projekt github Json2Java, który to robi. https://github.com/inder123/json2java
Json2Java zapewnia dostosowania, takie jak zmiana nazw pól i tworzenie hierarchii dziedziczenia.
Użyłem tego narzędzia do stworzenia stosunkowo złożonych interfejsów API:
Interfejs API TMS Gracenote: https://github.com/inder123/gracenote-java-api
Google Maps Geocoding API: https://github.com/inder123/geocoding
źródło
Aby dodać do posta @ japher. Jeśli nie jesteś szczególnie przywiązany do JSON, warto sprawdzić bufory protokołów .
źródło
Wypróbuj moje rozwiązanie
http://htmlpreview.github.io/?https://raw.githubusercontent.com/foobnix/android-universal-utils/master/json/generator.html
Wynikowa klasa Java
JSONObject get
JSONObject put
źródło
Pozwól, że pokażę ci, jak zaprojektować narzędzie. Możesz to zrobić:
Opracowuję narzędzie, które rozwiązuje problem. Jest dobrze zaprojektowane i szybkie. pobierz kod z mojego github .
ciesz się stąd, wdrożyłem go na serwerze internetowym .
Wypróbowuję sugestię z 2 najlepszych odpowiedzi. Jedna strona nie może się otworzyć. Jedna jest wolniejsza niż moje narzędzie. Mam nadzieję, że spodoba ci się moje narzędzie.
źródło