Moshi kütüphanesi nedir ?

Moshi Kütüphanesi tıpkı GSON kütüphanesi gibi, JSON Serialize/Deserialize işlemleri gerçekleştirebilen bir kütüphanedir.

Moshi kütüphanesini projemize dahil edelim;
implementation ‘com.squareup.moshi:moshi:1.9.2’

Örnek 1: İsimsiz JSON dizisi ile çalışmak;

deneme.json isminde bir dosya oluşturup içerisine aşağıdakileri ekleyip, FTP adresime yüklüyorum. Websiteniz yoksa github’a yükleyip, raw’ını açabilirsiniz.

[
{‘ad’: ‘ŞERİF’,’soyad’: ‘GÜNGÖR’},
{‘ad’: ‘KADİR’,’soyad’: ‘GÜNGÖR’}
]

Eğer websitem yok, webservis ile de uğraşmayalım diyorsanız, Bir string değişken oluşturup içerisine atıp deneme yapalım;

[{“ad”: “ŞERİF”,”soyad”: “GÜNGÖR”},{“ad”: “KADİR”,”soyad”: “GÜNGÖR”}]
String json = “[{\”ad\”: \”ŞERİF\”,\”soyad\”: \”GÜNGÖR\”},{\”ad\”: \”KADİR\”,\”soyad\”: \”GÜNGÖR\”}]”;

Projem içerisine Kisi.java dosyası oluşturuyorum;
import androidx.annotation.NonNull;

public class Kisi {
public String ad;
public String soyad;

@NonNull
@Override
public String toString() {
return ad+” “+soyad;
}
}

MainActivity.java dosyamıza 1 adet ListView ekliyorum tam sayfa genişliğinde, ismi listViewKisiler olsun.

MainActivity’nin son hali aşağıdaki gibidir;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.squareup.moshi.JsonAdapter;
import com.squareup.moshi.Moshi;
import com.squareup.moshi.Types;

import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

ListView listView;
ArrayAdapter<String> arrayAdapter;
String json = “[{\”ad\”: \”ŞERİF\”,\”soyad\”: \”GÜNGÖR\”},{\”ad\”: \”KADİR\”,\”soyad\”: \”GÜNGÖR\”}]”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

listView = findViewById(R.id.listViewKisiler);
Moshi moshi = new Moshi.Builder().build();

Type type = Types.newParameterizedType(List.class, Kisi.class);
JsonAdapter<List<Kisi>> adapter = moshi.adapter(type);
try {
List<Kisi> kisiler = adapter.fromJson(json);
arrayAdapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,(ArrayList)kisiler);
listView.setAdapter(arrayAdapter);
this.setTitle(“Toplam Kişi: “+kisiler.size());
} catch (IOException e) {
e.printStackTrace();
}

}
}
Moshi oldukça seri ve stabil çalışıyor, yine ilk defa kullandığım ve memnun kaldığım bir kütüphane 🙂

Örnek 2: Java tarafında Moshi ile JSON dizisi oluşturalım;
List<Map<String, String>> data = new ArrayList<>();
Map<String, String> item1 = new HashMap<>();
item1.put(“name”, “Google”);
item1.put(“url”, “https://google.com”);
data.add(item1);

Map<String, String> item2 = new HashMap<>();
item2.put(“name”, “LinkedIn”);
item2.put(“url”, “https://linkedin.com”);
data.add(item2);

Moshi moshi = new Moshi.Builder().build();
JsonAdapter<List> jsonAdapter = moshi.adapter(List.class);
String jsonStringFromObject = jsonAdapter.toJson(data);

Log.d(“JSON Çıktısı: “,jsonStringFromObject);

Örnek 3: İsimli JSON dizisi ile çalışmak:

Henüz bu kısmı bulamadım araştırmaya devam ediyorum…