Unity Online JSON Çekme

Unity Online JSON Çekme


Unity Online JSON Çekme

 Merhaba arkadaşlar bu yazımda sizlere Unity ile internet üzerinde bulunan sitemizden nasıl JSON verilerini çekebileceğimizi anlatacağım ve buna ek olarak JSON verilerinizi ücretsiz olarak saklayabileceğiniz bir internet sitesinden de bahsedeceğim.

Ek olarak diğer JSON gönderilerimize bakmanızı da öneririm.

Unity JSON Oluşturma ve JSON Okuma

Online JSON Saklama Sitesi/Servisi

.JSONbin.io alan adlı internet sitesinde önceden oluşturduğunuz veya sitede oluşturduğunuz JSON dosyalarını ücretsiz olarak paylaşabiliyorsunuz ve herhangi bir sunucu masrafı ödemeden projelerinizde çekmeniz gereken JSON dosyasına erişebiliyorsunuz.

Bu site ile ilgili daha sonra daha detaylı bilgiler vermeyi düşünüyorum kullanımına dair ama şimdilik uzun tutmuyoruz. Bilmeniz gereken tek şey şimdilik attığınız zaman size şöyle bir adres veriyor:

"https://api.jsonbin.io/b/5e3602be50a7fe418c57f30c" bu ilk yüklediğiniz JSON dosyasının adresidir.

Bunun dışında "https://api.jsonbin.io/b/5e3602be50a7fe418c57f30c/1" ve "https://api.jsonbin.io/b/5e3602be50a7fe418c57f30c/2" gibi yüklediğiniz JSON dosyasının güncelleme sayısına göre sonuna "/x" x numara ekleyip istediğiniz JSON dosyasının versiyonunu seçebiliyorsunuz. 

En son sürümü çekmek isterseniz "https://api.jsonbin.io/b/5e3602be50a7fe418c57f30c/latest" adresindeki gibi "/latest" eklemeniz yeterlidir.

JSON Verisini Çekme İşlemi Açıklama

JSON Verimizi çekmek için ilk olarak 2 adet C# Script oluşturacağız ve birinde JSON dosyamızı parse etmek için kullanacağımız veri türlerini (JSONData) bulunduracağız diğerinde ise JSON dosyamızı çekmek ve kullanmak istediğimiz yerlerde JSON dosyasına erişebilmek için olan kodlarımızı yazacağız (JSONController).

JSONData Scripti

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable] // jsonDataClass her yerden erişebilmemizi sağlıyor
public class jsonDataClass
{
    
  public int Version; // JSON da bulunan Version değişkeni
  public string AppName; // JSON da bulunan AppNAme değişkeni
    public sorularClass[] Sorular; // JSON da bulunan sorular dizi değişkeni için bunu oluşturuyoruz ve içeriğini altta doldurucaz
}
[System.Serializable] // sorularClass her yerden erişebilmemizi sağlıyor
public class sorularClass
{
    public int No; // JSON içinde bulunan Sorular dizisindeki No değişkeni
    public string Soru; // JSON içinde bulunan Sorular dizisindeki Soru değişkeni
    public string Dogru_Cevap; // JSON içinde bulunan Sorular dizisindeki Doğru_Cevap değişkeni
    public string Yanlis_Cevap1; // JSON içinde bulunan Sorular dizisindeki Yanlis_Cevap1 değişkeni
    public string Yanlis_Cevap2; // JSON içinde bulunan Sorular dizisindeki Yanlis_Cevap2 değişkeni
    public string Yanlis_Cevap3; // JSON içinde bulunan Sorular dizisindeki Yanlis_Cevap3 değişkeni
}

Yukarıda yazdığımız kodlar JSON dosyamızdan verileri çekerken JSON da oluşturduğumuz değişkenleri baz alarak adlandırıyoruz. 

Daha iyi anlamak için örnek JSON oluşturalım.

Yukarıdaki kodları yazarken aşağıda oluşturduğumuz JSON dosyasına göre oluşturduk ve değişkenlerin isimlerini JSON dosyasındaki değişkenlerin isimlerine göre belirledik burada önemli olan nokta bu ve siz de kendi JSON dosyanızı oluştururken buna dikkat ederek oluşturmanız gerekiyor.

{"Version":71,"AppName":"QuizRun","Sorular":[{"No":1,"Soru":"Mehmet Akif İstiklal Marşını nerede yazmıtır ?","Dogru_Cevap":"Ankara - Taceddin Dergahı","Yanlis_Cevap1":"Ankara - Keçiören Camisi","Yanlis_Cevap2":"Ankara - Ayaş Dergahı","Yanlis_Cevap3":"Ankara - Ayasofya"}]}

JSONController Scripti

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class jsonController : MonoBehaviour
{
    public bool veriTabaniVarmi = false, Yenile=false; // Veri varmı kontrol etmek ve veri yoksa veri gelene kadar istek yollamak için değişkenler
    public string jsonURL; //JSON verilerini çekeceğimiz sitenin değişkeni

    [System.Obsolete] // jsonDataClass a erişebilmemizi sağlıyor.
    void Start()
    {
        jsonURL = "https://api.jsonbin.io/b/5e3602be50a7fe418c57f30c/latest"; // JSON verilerinin bulunduğu aders
        StartCoroutine(getData()); // Veriyi çekmek için kullandığımız Coroutine fonksiyonu
        // NOT : IENumerator gibi özel fonksiyonları Coroutine ile çekmenz gerekiyor.
    }

    [System.Obsolete]// jsonDataClass a erişebilmemizi sağlıyor.
    private void Update()
    {
        /* Eğer veriyi çekemediysek yeniden veriyi çekmemizi sağlıyor. */
        if (Yenile)
        {
            StartCoroutine(getData());
            Yenile = false;
        }
    }

    [System.Obsolete] // jsonDataClass a erişebilmemizi sağlıyor.
    IEnumerator getData()
    {
        Debug.Log("Bekleyin"); 
        WWW _www = new WWW(jsonURL); // WWW değişkeni oluşturuyoruz ve json dosyamızı çekiyoruz.
        yield return _www; // Çektiğimiz veriyi döndürüyoruz.
        if (_www.error == null) // Hata almazsak
        {
            processJsonData(_www.text); // Veriyi çekmek için yolluyoruz.
            veriTabaniVarmi = true; // Verinin çekildiğini doğruluyoruz.
        }
        else
        {
            Debug.Log("Hata"); // Veri çekemediysek hata çıktısını veriyoruz
        }
    }

    public void processJsonData(string _url)
    {
        jsonDataClass jsnData = JsonUtility.FromJson<jsonDataClass>(_url); // Çektiğimiz JSON dosyasını oluşturduğumuz jsonDataClass veri tipine çeviriyoruz.

        Debug.Log("Uygulama adı : " + jsnData.AppName); // JSON verisindeki AppName değişkenini çekmek
        
        foreach (sorularClass x in jsnData.Sorular){ // JSON verisindeki Sorular dizisini çekmek için kullanıyoruz.
            Debug.Log(x.No + "\n");
            Debug.Log(x.Soru + "\n");
            Debug.Log(x.Dogru_Cevap + "\n");
            Debug.Log(x.Yanlis_Cevap1 + "\n");
            Debug.Log(x.Yanlis_Cevap2 + "\n");
            Debug.Log(x.Yanlis_Cevap3 + "\n");
        }
        // Eğer ki toplu değil de tek tek çekmek istersek
         Debug.Log(jsnData.Sorular[0].Soru); 
        /* Sorular[x] burada x kısmına 0 dan başlayıp JSON dizinizdeki max sayıya kadar sayı yazabilirsiniz 
        "." koydukdan sonra da jsonDataClass da bulunan Sorular class ı içindeki herhangi bir değişkeni girebilirsiniz.
        No, Soru, Dogru_Cevap, Yanlis_Cevap1, Yanlis_Cevap2, Yanlis_Cevap3 gibi...
        */
        
    }

}

Kodlar ile birlikte aslında yapmam gereken bütün açıklamaları yaptığıma inanıyorum dilimin döndüğü kadar ama takıldığınız herhangi bir yer olursa soru sormaktan, yorum atmaktan çekinmeyin.

Unity Online Json Çekme

Unity Online Json Çekme