efter offentliggørelse over 50 Retrofit blogindlæg har vi samlet nok feedback, at en masse udviklere ville elske en omfattende introduktion til Googles Gson. Gson er et meget kraftfuldt bibliotek til at kortlægge datastrukturer repræsenteret som JSON til Java-objekter. Selvfølgelig understøtter det også omvendt og kan skabe en passende JSON-repræsentation af dine Java-objekter.
hvis du er interesseret i, hvor denne serie går, så tjek vores serieoversigt:
Gson serie oversigt
Gson Dependency
denne vejledning vil være praktisk og starte med en vis serialisering om et minut. Da mange af vores læsere er Android-udviklere, skræddersyr vi det til dig, men Gson kan bruges i ethvert Java-miljø. Før vi kan komme i gang, skal vi hente Gson-biblioteket til vores projekt. I skrivende stund er den seneste version 2.8.5
. Hvis du bruger Gradle, skal du tilføje følgende linje:
implementation 'com.google.code.gson:gson:2.8.5'
hvis du bruger Maven, kan du tilføje følgende afhængighed:
<dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> <scope>compile</scope> </dependency></dependencies>
for de stakkels fyre bruger hverken afhængighed management system, kan du hente krukken på den officielle GitHub repository.
Grundlæggende om Java-JSON serialisering
så lad os gøre noget serialisering! Serialisering i sammenhæng med Gson betyder kortlægning af et Java-objekt til dets JSON-repræsentation. I de næste par tutorials vil vores data blive mere komplekse, men for nu starter vi med en meget almindelig UserSimple
objekt:
public class UserSimple { String name; String email; int age; boolean isDeveloper;}
brugerobjektet har fire egenskaber:
- brugerens
name
er et Strengobjekt - brugerens
email
er også et Strengobjekt - brugerens
age
er et heltal, hvilket betyder, at alderen er gemt i år (for eksempel26
og ikke den nøjagtige fødselsdag!) - endelig et boolsk flag
isDeveloper
vores Android-eller Java-applikation skal konvertere et UserSimple
– objekt til dets JSON-repræsentation. Forudsat at vi holder medlemsnavnene de samme, vi forventer en sådan JSON for Norman, forfatteren af dette blogindlæg:
{ "name": "Norman", "email": "[email protected]", "age": 26, "isDeveloper": true}
så lad os se, hvordan vi kan gøre konverteringen med Gson. Først og fremmest skal vi oprette et Java-objekt til Norman:
UserSimple userObject = new UserSimple( "Norman", "[email protected]", 26, true);
for at gøre serialiseringen har vi brug for et Gson
objekt, som håndterer konverteringen. Vi kan simpelthen bruge konstruktøren:
Gson gson = new Gson();
Dernæst skal vi ringe til funktionen toJson()
og passere UserSimple
objektet:
String userJson = gson.toJson(userObject);
objektet userJson
indeholder følgende værdi:
{ "age": 26, "email": "[email protected]", "isDeveloper": true, "name": "Norman"}
Gson ændrede rækkefølgen af egenskaberne (til alfabetisk), men indholdet er identisk! Bemærk, hvordan Gson respekterede typerne. Strengværdier blev pakket ind i ""
, mens heltalsværdier ikke havde nogen indpakning. Vi behøvede ikke at rode rundt med JSON
objekter eller kopiere enkelte medlemmer. Et enkelt opkald til Gson var nok til at kortlægge hele objektet. Dette er yderst praktisk, når vi arbejder med komplekse datastrukturer. Men før vi går for dybt, lad os teste den anden retning. Kan Gson oprette et Java-objekt fra ovenstående JSON?
Grundlæggende om JSON-Java deserialisering
først og fremmest skal vi oprette en streng, som indeholder ovennævnte JSON:
String userJson = "{'age':26,'email':'[email protected]','isDeveloper':true,'name':'Norman'}";
vi ændrede "
til '
for at undgå tonsvis af \"
undslippe. Ikke desto mindre fungerer det begge veje. Det næste trin er, som du sandsynligvis har gættet, at oprette en Gson-instans:
Gson gson = new Gson();
endelig skal vi kortlægge fra en JSON til et Java-objekt med fromJson()
:
UserSimple userObject = gson.fromJson(userJson, UserSimple.class);
bemærk, hvordan vi skal passere det forventede Java-objekt som den anden parameter. Ellers ved Gson ikke, hvad det skal kortlægge JSON til. Det er ikke en tryllekunstner!
hvis vi vedhæfter en debugger og kontrollerer den resulterende userObject
, viser det os, at Gson med succes kortlagde alle egenskaber korrekt:
i dette Kom godt i gang-indlæg har du set den grundlæggende brug af Gson. Vi har vist, hvor nemt det er at kortlægge fra og til JSON data. Vi er sikre på, at du har en masse spørgsmål i øjeblikket:
- har Java – modelklasserne brug for en konstruktør/getter/setter?
- kan Java-modelfelterne være private?
- Hvordan håndteres null-værdier?
- hvad hvis Java-klassen har en anden medlemsnavn end JSON?
- sådan (de)serialiseres arrays/lister over objekter
- sådan (de)serialiseres indlejrede objekter
- holder Gson en defineret standardværdi for en klasseejendom under udførelse
.fromJson()
og der er ikke nogen værdi for den ejendom, der er tilgængelig i JSON?
ingen bekymringer, vi kommer til dem alle i de kommende uger. Hvis du har et bestemt emne i tankerne, så lad os det vide i kommentarerne eller på kvidre @futurestud_io.
gør det rock & nyd kodning!
ikke ekspert endnu? Få Vores Gson Bog!
kortlægning af JSON til Java-objekter (og omvendt) er fra 90 ‘ erne. Gson er den moderne løsning til at kortlægge mellem Java og JSON automatisk med minimal indsats.
du skal bare vide hvordan! Lær alle detaljer om Gsons muligheder, konfiguration & tilpasning i vores bog.
vores bog indeholder alt hvad du behøver at vide om Gson. Værdsæt din tid og spar dig selv fra endeløse timer med Google-søgninger for hurtigt at løse dine problemer. Invester i din viden på forhånd og i en ren løsning. Vi gør dig til Gson-ekspert på dit team.
indeholder en projektmappe!