na het publiceren van meer dan 50 Retrofit blog posts hebben we genoeg feedback verzameld dat veel ontwikkelaars graag een uitgebreide introductie tot Google ‘ s Gson zouden willen. Gson is een zeer krachtige bibliotheek om gegevensstructuren weergegeven als JSON naar Java-objecten in kaart te brengen. Natuurlijk, het ondersteunt ook de andere manier rond en kan een passende JSON vertegenwoordiging van uw Java-objecten te creëren.
als u geïnteresseerd bent in waar deze serie naartoe gaat, bekijk dan onze serieoverzicht:
Gson-serie overzicht
Gson Dependency
deze gids zal hands-on zijn en binnen een minuut beginnen met enige serialisatie. Aangezien veel van onze lezers Android-ontwikkelaars zijn, zullen we het op maat maken voor u, maar Gson kan worden gebruikt in elke Java-omgeving. Voordat we kunnen beginnen, moeten we de Gson bibliotheek gebruiken voor ons project. Op het moment van schrijven is de laatste versie 2.8.5
. Als u Gradle gebruikt, voegt u de volgende regel toe:
implementation 'com.google.code.gson:gson:2.8.5'
Als u Maven gebruikt, kunt u de volgende afhankelijkheid toevoegen:
<dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> <scope>compile</scope> </dependency></dependencies>
voor de arme jongens die geen enkel dependency management systeem gebruiken, kun je de jar downloaden op de officiële GitHub repository.
basis van Java-JSON serialisatie
dus laten we wat serialisatie doen! Serialisatie in de context van Gson betekent het in kaart brengen van een Java-object aan zijn JSON-representatie. In de volgende tutorials zullen onze gegevens complexer worden, maar voor nu zullen we beginnen met een heel eenvoudig UserSimple
object:
public class UserSimple { String name; String email; int age; boolean isDeveloper;}
het gebruikersobject heeft vier eigenschappen:
- de gebruiker
name
is een String object - de gebruiker
email
is ook een String object - de gebruiker
age
is een geheel getal, wat betekent dat de leeftijd wordt opgeslagen in jaren (bijvoorbeeld26
en niet de exacte verjaardag!) - eindelijk een Booleaanse vlag
isDeveloper
onze Android-of Java-applicatie moet een UserSimple
– object converteren naar zijn JSON-representatie. Ervan uitgaande dat we de namen van de leden hetzelfde houden, zouden we zo ‘ n JSON verwachten voor Norman, de auteur van deze blogpost:
{ "name": "Norman", "email": "[email protected]", "age": 26, "isDeveloper": true}
laten we eens kijken hoe we de conversie met Gson kunnen doen. Allereerst moeten we een Java-object maken voor Norman:
UserSimple userObject = new UserSimple( "Norman", "[email protected]", 26, true);
om de serialisatie uit te voeren, hebben we een Gson
object nodig, dat de conversie afhandelt. We kunnen gewoon de constructor gebruiken:
Gson gson = new Gson();
vervolgens moeten we de functie toJson()
aanroepen en het UserSimple
object doorgeven:
String userJson = gson.toJson(userObject);
het userJson
object bevat de volgende waarde:
{ "age": 26, "email": "[email protected]", "isDeveloper": true, "name": "Norman"}
Gson veranderde de volgorde van de eigenschappen( Alfabetisch), maar de inhoud is identiek! Merk op hoe Gson de types respecteerde. Tekenreekswaarden werden verpakt in ""
, terwijl integer-waarden niet werden afgebroken. We hoefden niet te knoeien met JSON
objecten of enkele leden te kopiëren. Eén telefoontje naar Gson was genoeg om het hele object in kaart te brengen. Dit is erg handig als we werken met complexe datastructuren. Maar voordat we te diep gaan, laten we de andere richting testen. Kan Gson een Java-object maken van bovenstaande JSON?
Basics of JSON-Java Deserialization
Allereerst moeten we een String aanmaken, die de hierboven genoemde JSON bevat:
String userJson = "{'age':26,'email':'[email protected]','isDeveloper':true,'name':'Norman'}";
we hebben "
veranderd in '
om te voorkomen dat er ton \"
ontsnapt. Toch werkt het hoe dan ook. De volgende stap is, zoals je waarschijnlijk al geraden hebt, om een Gson instantie aan te maken:
Gson gson = new Gson();
tot slot moeten we van een JSON naar een Java-object in kaart brengen met fromJson()
:
UserSimple userObject = gson.fromJson(userJson, UserSimple.class);
merk op hoe we het verwachte Java object als tweede parameter moeten doorgeven. Anders Weet Gson niet waar het de JSON op in kaart moet brengen. Het is geen goochelaar.
als we een debugger aankoppelen en de resulterende userObject
controleren, zal het ons laten zien dat Gson met succes alle eigenschappen correct heeft toegewezen:
In deze getting started post heb je het basisgebruik van Gson gezien. We hebben laten zien hoe gemakkelijk het is om JSON data in kaart te brengen. We weten zeker dat je een hoop vragen hebt op dit moment.:
- hebben de Java model klassen een constructor/getter/setter nodig?
- kunnen de Java-modelvelden privé zijn?
- Hoe worden null-waarden afgehandeld?
- wat als de Java-klasse een andere naam heeft dan de JSON?
- hoe arrays/lijsten van objecten
- serialiseren (de)Hoe geneste objecten
- serialiseren (de)behoudt Gson een gedefinieerde standaardwaarde voor een klasse-eigenschap tijdens het uitvoeren van
.fromJson()
en er is geen waarde voor die eigenschap beschikbaar in JSON?
geen zorgen, we zullen ze allemaal in de komende weken. Als je een specifiek onderwerp in gedachten hebt, laat het ons weten in de commentaren of op twitter @futurestud_io.
Maak het rock & geniet van coderen!
nog geen Expert? Pak Ons Gson Boek!
Mapping JSON naar Java-objecten (en vice versa) is uit de jaren ‘ 90. Gson is de moderne oplossing voor de kaart tussen Java en JSON automatisch met minimale inspanning.
u hoeft alleen maar te weten hoe! Leer elk detail over de mogelijkheden van Gson, configuratie & aanpassen in ons boek.
ons boek bevat alles wat u moet weten over Gson. Waardeer uw tijd en bespaar jezelf van eindeloze uren van Google zoekopdrachten om snel uw problemen op te lossen. Investeer vooraf in uw kennis en in een schone oplossing. We maken jou de Gson expert in je team.
bevat een werkmap!