po opublikowaniu ponad 50 postów na blogu, zebraliśmy wystarczająco dużo opinii, że wielu programistom spodoba się obszerne wprowadzenie do Gson Google. Gson jest bardzo potężną biblioteką do mapowania struktur danych reprezentowanych jako JSON na obiekty Java. Oczywiście obsługuje również odwrotnie i może tworzyć odpowiednią reprezentację JSON Twoich obiektów Java.
jeśli jesteś zainteresowany, dokąd zmierza ta seria, sprawdź nasz zarys serii:
przegląd serii Gson
zależność od Gson
ten przewodnik będzie praktyczny i rozpocznie się od pewnej serializacji za minutę. Ponieważ wielu naszych czytelników jest programistami Androida, dostosujemy go dla Ciebie, ale Gson może być używany w dowolnym środowisku Java. Zanim zaczniemy, musimy ściągnąć bibliotekę Gson do naszego projektu. W chwili pisania tego tekstu najnowsza wersja to 2.8.5
. Jeśli używasz Gradle, Dodaj następujący wiersz:
implementation 'com.google.code.gson:gson:2.8.5'
jeśli używasz Mavena, możesz dodać następującą zależność:
<dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> <scope>compile</scope> </dependency></dependencies>
dla biednych, którzy nie używają żadnego systemu zarządzania zależnościami, możesz pobrać jar z oficjalnego repozytorium GitHub.
podstawy serializacji Java-JSON
więc zróbmy trochę serializacji! Serializacja w kontekście Gson oznacza mapowanie obiektu Java do jego reprezentacji JSON. W następnych kilku samouczkach nasze dane staną się bardziej złożone, ale na razie zaczniemy od bardzo prostego obiektu UserSimple
:
public class UserSimple { String name; String email; int age; boolean isDeveloper;}
obiekt user posiada cztery właściwości:
-
name
użytkownika jest obiektem łańcuchowym -
email
użytkownika jest również obiektem łańcuchowym -
age
użytkownika jest liczbą całkowitą, co oznacza, że wiek jest zapisywany w latach (na przykład26
a nie dokładne urodziny! - wreszcie flaga boolean
isDeveloper
nasza aplikacja na Androida lub Java musi przekonwertować obiekt UserSimple
na jego reprezentację JSON. Zakładając, że nazwy członków pozostaną takie same, spodziewalibyśmy się takiego JSON dla Normana, autora tego posta na blogu:
{ "name": "Norman", "email": "[email protected]", "age": 26, "isDeveloper": true}
zobaczmy więc, jak możemy przeprowadzić konwersję za pomocą Gson. Przede wszystkim musimy stworzyć obiekt Java dla Normana:
UserSimple userObject = new UserSimple( "Norman", "[email protected]", 26, true);
aby wykonać serializację, potrzebujemy obiektu Gson
, który obsługuje konwersję. Możemy po prostu użyć konstruktora:
Gson gson = new Gson();
następnie musimy wywołać funkcję toJson()
i przekazać obiekt UserSimple
:
String userJson = gson.toJson(userObject);
obiekt userJson
zawiera następującą wartość:
{ "age": 26, "email": "[email protected]", "isDeveloper": true, "name": "Norman"}
Gson zmienił kolejność właściwości (na alfabetyczną), ale zawartość jest identyczna! Zauważ, jak GSON szanował typy. Wartości łańcuchowe były zawijane w ""
, podczas gdy wartości całkowite nie miały zawijania. Nie musieliśmy bawić się obiektami JSON
ani kopiować pojedynczych członków. Jedno wywołanie do Gson wystarczyło, aby zmapować cały obiekt. Jest to niezwykle przydatne, gdy pracujemy ze złożonymi strukturami danych. Ale zanim przejdziemy zbyt głęboko, przetestujmy inny kierunek. Czy Gson może utworzyć obiekt Java z powyższego JSON?
podstawy deserializacji JSON-Java
przede wszystkim musimy utworzyć łańcuch, który zawiera wspomniany wyżej JSON:
String userJson = "{'age':26,'email':'[email protected]','isDeveloper':true,'name':'Norman'}";
zmieniliśmy "
na '
, aby uniknąć ucieczki ton \"
. Niemniej jednak, to działa tak czy inaczej. Następnym krokiem jest, jak się pewnie domyślasz, utworzenie instancji Gson:
Gson gson = new Gson();
na koniec musimy mapować z JSON na obiekt Java z fromJson()
:
UserSimple userObject = gson.fromJson(userJson, UserSimple.class);
zauważ, jak musimy przekazać oczekiwany obiekt Java jako drugi parametr. W przeciwnym razie Gson nie wie, do czego powinien mapować JSON. To nie jest magik!
jeśli podłączymy debugger i sprawdzimy wynik userObject
to pokaże nam, że Gson pomyślnie zmapował wszystkie właściwości poprawnie:
w tym poście dotyczącym rozpoczęcia zapoznałeś się z podstawowym zastosowaniem Gson. Pokazaliśmy, jak łatwo jest mapować z I do danych JSON. Jesteśmy pewni, że masz teraz kilka pytań:
- czy klasy modelu Java potrzebują konstruktora/gettera / settera?
- czy pola Modelu Java mogą być prywatne?
- jak obsługiwane są wartości null?
- co jeśli Klasa Java ma inne nazwy członków niż JSON?
- jak (de)serializować tablice/listy obiektów
- jak (de)serializować zagnieżdżone obiekty
- czy Gson zachowuje zdefiniowaną wartość domyślną dla właściwości klasy podczas wykonywania
.fromJson()
i nie ma żadnej wartości dla tej właściwości dostępnej w JSON?
nie martw się, dotrzemy do wszystkich w nadchodzących tygodniach. Jeśli masz na myśli konkretny temat, daj nam znać w komentarzach lub na Twitterze @futurestud_io.
Make it rock & ciesz się kodowaniem!
nie jesteś jeszcze ekspertem? Pobierz Naszą Książkę Gson!
mapowanie JSON na obiekty Java (i vice versa) pochodzi z Lat 90. Gson jest nowoczesnym rozwiązaniem do automatycznego mapowania między Java i JSON przy minimalnym wysiłku.
musisz tylko wiedzieć jak! Poznaj każdy szczegół o możliwościach Gson, konfiguracji & dostosowywania w naszej książce.
nasza książka zawiera wszystko, co musisz wiedzieć o Gson. Cenisz swój czas i oszczędzaj przed niekończącymi się godzinami wyszukiwań w Google, aby szybko rozwiązać problemy. Zainwestuj w swoją wiedzę z góry i stwórz czyste rozwiązanie. Uczynimy cię ekspertem od Gson w Twoim zespole.
zawiera skoroszyt!