GSON Nedir ? GSON Kütüphanesinin Java’da Kullanımı
Gündelik hayatımızda JSON ile işlem yapıyorsak adını sıkça bildiğimiz hatta gündelik işlerimizde çokca kullandığımız JSON ‘dan objeye ya da objeden json ‘a döndürme kütüphanesi olan GSON ‘ı gelelim bu dersimizde anlatmaya.
Eğer JSON nedir ya da daha detaylı bilgi öğrenmek istiyorsanız /2015/03/json-nedir-ne-amacla-kullanilir/ dersimi incelemenizi öneririm.
Her zaman yaptığımız gibi gson kütüphanesini projemize ekleyerek başlayacağız..
İster jar ya da ister maven projesi için : //mvnrepository.com/artifact/com.google.code.gson/gson/2.3.1
<dependencies>
<!-- //mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>Google ‘ın oluşturduğu GSON açık kaynak bir proje, //github.com/google/gson adresinden repo’yu inceleyebilirsiniz.
Şimdi öncelikle bir JSON objesi oluşturalım.
@SerializedName(“name”) –> Eğer json ‘daki key değerinden farklı bir şekilde objeyi isimlendirmek istiyorsak SerializedName kullanılır.
Hemen bir model class yazıyorum. User class ‘ımı yazıyorum.
public class User {
private String name;
private String surname;
private int age;
public User() {
}
public User(String name, String surname, int age) {
this.name = name;
this.surname = surname;
this.age = age;
}
public String getName() {
return name;
}
public String getSurname() {
return surname;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setSurname(String surname) {
this.surname = surname;
}
public void setAge(int age) {
this.age = age;
}
}
Gson kütüphanesiyle Json ‘a verimi dönüştürmek için, Gson nesnemi oluşturuyorum ve toJson metotu ile json oluşuyor.
public static void main(String[] args) {
List<User> userList = new ArrayList();
User user = new User("Ümit","KÖSE",28);
User user1 = new User("Hakkı","TAŞDEMİR",17);
User user2 = new User("Musa","ALTUN",29);
userList.add(user);
userList.add(user1);
userList.add(user2);
Gson gson = new Gson(); //Gson() yerine GsonBuilder().create() 'da çok kullanılıyor.
System.out.println(gson.toJson(userList));
}Çıktı :
[{“name”:”Ümit”,”surname”:”KÖSE”,”age”:28},{“name”:”Hakkı”,”surname”:”TAŞDEMİR”,”age”:17},{“name”:”Musa”,”surname”:”ALTUN”,”age”:29}]
yukarıda da söyledim eğer name key ‘ini misal isim diye bir değişkeninde tutmak istiyorsanız; aşağıdaki gibi işlem yapmanız gerekiyor.
@SerializedName("name")
private String isim; Şimdi json oluşturduk. Tek bir elementli json ‘ımızı biraz daha karmaşık hale getirelim. User Class ‘ımızın içinde Work diye bir class daha ekleyelim.
Work classımız :
public class Work {
private String company;
private String salary;
public Work(String company, String salary) {
this.company = company;
this.salary = salary;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
}User Classın son hali.
package gson;
import com.google.gson.annotations.SerializedName;
/**
*
* @author umiitkose
*/public class User {
@SerializedName("name")
private String name;
private String surname;
private int age;
private Work work;
public User() {
}
public User(String name, String surname, int age, Work work) {
this.name = name;
this.surname = surname;
this.age = age;
this.work = work;
}
public String getName() {
return name;
}
public String getSurname() {
return surname;
}
public int getAge() {
return age;
}
public Work getWork() {
return work;
}
public void setName(String name) {
this.name = name;
}
public void setSurname(String surname) {
this.surname = surname;
}
public void setAge(int age) {
this.age = age;
}
public void setWork(Work work) {
this.work = work;
}
}Şimdi json oluşturalım.
[{"name":"Ümit","surname":"KÖSE","age":28,"work":{"company":"Türksat","salary":"1"}},{"name":"Hakkı","surname":"TAŞDEMİR","age":17,"work":{"company":"Türksat","salary":"12"}},{"name":"Musa","surname":"ALTUN","age":29,"work":{"company":"Türksat","salary":"15"}}]Burada örnek olarak elinizde bir json var bu json ‘ı model class’larına dönüştürmemiz gerekiyor. Eğer çok karışık bir json var ise //www.jsonschema2pojo.org/ kullanarak elinizdeki json ‘ı vererek pojo class ‘larını oluşturabilirsiniz.
Şimdi Json ‘dan class ‘a dönüştürme işlemini yapmadan önce son olarak GSON kütüphanesi ile gelen json ‘ı yukarıdaki gibi text metin yerine pretty olarak olarak’ta yazabiliriz.
Bunun için GsonBuilder().setPrettyPrinting().create(); ile GSON oluşturmalıyız.
Eğer setFieldNamingPolicy verirsekte ilk harf büyük, küçük, nokta vs olacağını seçebiliriz.
GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.IDENTITY).setPrettyPrinting().create();
FieldNamingPolicy.IDENTITY –> değişkenin ismi değişmez
FieldNamingPolicy.LOWER_CASE_WITH_DASHES –> “-” işareti eklenir. Örn.
first_name yerine "first_-name" olur.
FieldNamingPolicy.LOWER_CASE_WITH_DOTS –> “.” işareti ekler. Örn.
first_name yerine "first_.name" olur.
Diğerleri :
FieldNamingPolicy.UPPER_CAMEL_CASE –> değişkenlerin keylerinin ilk harfini büyük harf yapar.
FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES –> ” ” ekler.
Şimdi bir takım özellikleri de gördük, gelin mevcut Json ‘ı objeye dönüştürelim.
Önceki Json dosyamızı bir string dosyaya aktardım. Sonrasında Type değişkeni oluşturdum. Type ile Reflect oluşturduk ve çalışma anında bunu User ‘a bağladığını gördük.
TypeTokenEğer doğrudan inşa etmek gerekiyordu çünkü sınıf kendisi bir public kurucu yoktur. Bunun yerine, her zaman anonim bir alt sınıf inşa ederiz (bu nedenle,{}bu ifadenin gerekli bir parçasıdır).
Tür silme nedeniyle, TypeTokensınıf yalnızca derleme zamanında tam olarak bilinen türleri yakalayabilir. (Yani, new TypeToken<List<T>>() {}.getType()bir tür parametresi için yapamazsınız T.)
Daha fazla bilgiiçinTypeTokensınıfın belgelerinebakabilirsiniz .
String jsonData = "[{\"name\":\"Ümit\",\"surname\":\"KÖSE\",\"age\":28,\"work\":{\"company\":\"Türksat\",\"salary\":\"1\"}},{\"name\":\"Hakkı\",\"surname\":\"TAŞDEMİR\",\"age\":17,\"work\":{\"company\":\"Türksat\",\"salary\":\"12\"}},{\"name\":\"Musa\",\"surname\":\"ALTUN\",\"age\":29,\"work\":{\"company\":\"Türksat\",\"salary\":\"15\"}}]";
Type type = new TypeToken<List<User>>() {
}.getType();
ArrayList<User> userFromJson = gson.fromJson(jsonData, type);
for(User kullanicim:userFromJson){
System.out.println(kullanicim.getName());}GSON Dersimiz bu kadardı, okuduğunuz için teşekkür ederim.
İyi Çalışmalar dilerim.














