după publicarea a peste 50 de postări de blog Retrofit, am adunat suficient feedback că o mulțime de dezvoltatori ar plăcea o introducere extinsă la Gson Google. Gson este o bibliotecă foarte puternică pentru a mapa structurile de date reprezentate ca JSON la obiecte Java. Desigur, acceptă și invers și poate crea o reprezentare JSON adecvată a obiectelor dvs.
dacă vă interesează unde se îndreaptă această serie, consultați schița seriei noastre:
Prezentare generală a seriei Gson
dependența Gson
acest ghid va fi hands-on și începe cu unele serializare într-un minut. Deoarece mulți dintre cititorii noștri sunt Dezvoltatori Android, îl vom adapta pentru dvs., dar Gson poate fi utilizat în orice mediu Java. Înainte de a putea începe, avem nevoie pentru a trage în biblioteca Gson la proiectul nostru. La momentul scrierii, cea mai recentă versiune este 2.8.5
. Dacă utilizați Gradle, adăugați următoarea linie:
implementation 'com.google.code.gson:gson:2.8.5'
dacă utilizați Maven, puteți adăuga următoarea dependență:
<dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> <scope>compile</scope> </dependency></dependencies>
pentru băieții săraci care nu utilizează niciun sistem de gestionare a dependenței, puteți descărca borcanul în depozitul oficial GitHub.
bazele serializării Java-JSON
deci, să facem niște serializare! Serializarea în contextul Gson înseamnă maparea unui obiect Java la reprezentarea sa JSON. În următoarele câteva tutoriale datele noastre vor deveni mai complexe, dar deocamdată vom începe cu un obiect foarte simplu UserSimple
:
public class UserSimple { String name; String email; int age; boolean isDeveloper;}
obiectul utilizator are patru proprietăți:
-
name
al utilizatorului este un obiect String -
email
al utilizatorului este, de asemenea, un obiect String - al utilizatorului
age
este un număr întreg, ceea ce înseamnă că vârsta este stocată în ani (de exemplu26
și nu ziua de naștere exactă!) - în cele din urmă un steag boolean
isDeveloper
aplicația noastră Android sau Java trebuie să convertească un obiect UserSimple
la reprezentarea sa JSON. Presupunând că păstrăm numele membrilor la fel, ne-am aștepta la un astfel de JSON pentru Norman, autorul acestui post pe blog:
{ "name": "Norman", "email": "[email protected]", "age": 26, "isDeveloper": true}
deci, să vedem cum putem face conversia cu Gson. În primul rând, trebuie să creăm un obiect Java pentru Norman:
UserSimple userObject = new UserSimple( "Norman", "[email protected]", 26, true);
pentru a face serializarea, avem nevoie de un obiect Gson
, care se ocupă de conversie. Putem folosi pur și simplu constructorul:
Gson gson = new Gson();
apoi, trebuie să apelăm funcția toJson()
și să trecem obiectul UserSimple
:
String userJson = gson.toJson(userObject);
obiectul userJson
conține următoarea valoare:
{ "age": 26, "email": "[email protected]", "isDeveloper": true, "name": "Norman"}
Gson a schimbat ordinea proprietăților (în ordine alfabetică), dar conținutul este identic! Rețineți modul în care Gson a respectat tipurile. Valorile șirurilor au fost înfășurate în ""
, în timp ce valorile întregi nu aveau înfășurare. Nu a trebuit să ne încurcăm cu obiecte JSON
sau să copiem membri singuri. Un singur apel către Gson a fost suficient pentru a cartografia întregul obiect. Acest lucru este extrem de util atunci când lucrăm cu structuri de date complexe. Dar înainte de a merge prea adânc, să testăm cealaltă direcție. Poate GSON să creeze un obiect Java din JSON de mai sus?
bazele JSON-Java deserializare
în primul rând, avem nevoie pentru a crea un șir de caractere, care conține JSON menționate mai sus:
String userJson = "{'age':26,'email':'[email protected]','isDeveloper':true,'name':'Norman'}";
am schimbat "
la '
pentru a evita ca tone de \"
să scape. Cu toate acestea, funcționează oricum. Următorul pas este, după cum probabil ați ghicit, să creați o instanță Gson:
Gson gson = new Gson();
în cele din urmă, ne-am pentru a mapa de la un JSON la un obiect Java cu fromJson()
:
UserSimple userObject = gson.fromJson(userJson, UserSimple.class);
rețineți cum trebuie să trecem obiectul Java așteptat ca al doilea parametru. În caz contrar, Gson nu știe la ce ar trebui să mapeze JSON. Nu e un magician!
dacă atașăm un depanator și verificăm rezultatul userObject
ne va arăta că Gson a mapat cu succes toate proprietățile corect:
în această postare de început ați văzut utilizarea de bază a Gson. Am arătat cât de ușor este de a mapa de la și la datele JSON. Suntem siguri că aveți o grămadă de întrebări în acest moment:
- clasele de modele Java au nevoie de un constructor/getter/setter?
- câmpurile modelului Java pot fi private?
- cum se manipulează valorile nule?
- ce se întâmplă dacă clasa Java are o denumire diferită a membrilor decât JSON?
- cum se (de)serializează tablourile/listele de obiecte
- cum se (de) serializează obiectele imbricate
- GSON păstrează o valoare implicită definită pentru o proprietate de clasă în timp ce execută
.fromJson()
și nu există nicio valoare pentru acea proprietate disponibilă în JSON?
nu vă faceți griji, vom ajunge la toate în următoarele săptămâni. Dacă aveți în vedere un anumit subiect, anunțați-ne în comentarii sau pe twitter @futurestud_io.
face rock & bucurați-vă de codificare!
încă nu ești Expert? Ia Cartea Noastră Gson!
maparea JSON la obiecte Java (și invers) este din anii ‘ 90. Gson este soluția modernă de a mapa între Java și JSON automat cu un efort minim.
trebuie doar să știi cum! Aflați fiecare detaliu despre capacitățile Gson, configurarea & personalizare în cartea noastră.
cartea noastră conține tot ce trebuie să știți despre Gson. Prețuiește-ți timpul și salvează-te de ore nesfârșite de căutări Google pentru a-ți rezolva rapid problemele. Investiți în cunoștințele dvs. în avans și într-o soluție curată. Te vom face expertul Gson în echipa ta.
include un registru de lucru!