7. Verilerin Taşınması

Verilerin taşınmasına ilişkin birçok yöntem göze çarpmaktadır. Bu formatlardan ortak olarak kolaylıkla kullanılabilen 2 tane biçim bulunmaktadır;

  1. JSON(Javascript Object Notation)

  2. XML(Exclusive Markup Language)

Her iki formatında tipik özelliği okunabilir(human-readable) JSON ile ilgili kolay okunabilir ve kolay hazırlanabilir text formatlar olmalıdır.

JSON Formatı

json.org

JSON formatı Javascript programlama dilinin nesne biçimine uyduğu için bu ismi almıştır. JSON formatı küme parantezi içerisinde isim-değer çifti şeklinde oluşturulmaktadır. Genel olarak Java'daki HashMap yapısına benzetilebilir.

Örnek bir JSON Kodu Aşağıdaki gibi yazılabilir.

/*----------------------------------------------------------------------------------------------------------------------
    Örnek bir JSON formatı
----------------------------------------------------------------------------------------------------------------------*/
{
    "name":"oguz",
    "number":"1234",
    "tel": {
        "gsm":"05325158012", 
        "work":"02122883520"
     }        
}

Anahtar Not: JSON formatına ilişkin detayla www.json.org veya ecma-404 standartlarıyla bakılabilir.

Maalesef Java'nın standart kütüphanesi içerisinde JSON formatı ile işlem yapan sınıflar bulunmamaktadır. Ancak populer olarak geliştirilmiş olan birçok JSON sınıfı bulunmaktadır. Bunlardan Jackson ve org.json gibi sınıflar oldukça yoğun olarak kullanılmaktadır. Hatta org.json olarak adlandırılan sınıflar Android SDK içerisinde standart olarak gelmektedir. JSON formatı çok basit olduğundan kolaylıkla yazılabilir.

JSON formatı içerisindeki isimler bir nesneye yada bir collection'a karşılık gelebilir. Aslında basit JSON formatları StringBuilder gibi sınıflarla da basit bir şekilde hazırlanabilir.

Basit bir JSON formatı oluşturan metot ve test kodu şu şekilde tasarlanabilir.

package org.csystem;

public class App {
    public static void main(String[] args) 
    {
        System.out.println(Utils.toJSON(new JSONPair("ali", "veli"), new JSONPair("selami", "davut")));                    
    }
}

class JSONPair {
    public String Key;
    public String Value;
    public JSONPair(String key, String value)
    {
        Key = key;
        Value = value;
    }
}

class Utils {
    public static String toJSON(JSONPair ...pairs)
    {
        String openCurly = "{", closeCurly = "}";
        StringBuilder sb = new StringBuilder();
        sb.append(String.format("%s%n", openCurly));

        for (int i = 0; i < pairs.length; ++i) {
            if (i != 0)
                sb.append(String.format("%c%n", ','));

            sb.append(String.format("\"%s\":\"%s\"", pairs[i].Key, pairs[i].Value));
        }

        sb.append(String.format("%n%s%n", closeCurly));

        return sb.toString();
    }
}

org.json Paketi

org.json içerisindeki JSON sınıfları çok geniş bir kullanıma sahip ve basit olarak tasarlanmıştır. org.json paketi için bir çok jar dosyası bulunmaktadır. Burada şu paketi kullanıcağız -> json-20090211.jar

org.json ile bir JSON formatı şu şekilde oluşturulabilir.

 JSONObject jsonObject = new JSONObject();

put metotları ile aşağıdaki gibi eleman eklenebilir.

 jsonObject.put("name", "batuhan");
 jsonObject.put("number", "123");
 jsonObject.put("adress", "marmaris");

org.json paketi içerisindeki sınıflar JSONException isimli sınıf nesneleri throw ederler.

JSONObject sınıfı ile JSON formatı içerisinde dizi şu şekilde oluşturulabilir.

 /*----------------------------------------------------------------------------------------------------------------------
    JSONObject JSON formatı içerisinde dizi oluşturulması
----------------------------------------------------------------------------------------------------------------------*/
package org.csystem;

import org.json.JSONException;
import org.json.JSONObject;

public class App {
    public static void main(String[] args) throws JSONException 
    {
        JSONObject jsonObject = new JSONObject();

        jsonObject.put("name", "batuhan");
        jsonObject.put("number", new String [] {"1234", "5678", "67887"});
        jsonObject.put("address", "marmaris");        

        System.out.println(jsonObject);                            
    }
}

JSON içerisindeki bir dizi şu şekilde şu dolaşılabilir. Burada dikkat edilmesi gereken JSON formatındaki dizi belirtilmemişse exception throw eder.

```/*----------------------------------------------------------------------------------------------------------------------
    JSONArray sınıfı
----------------------------------------------------------------------------------------------------------------------*/
package org.csystem;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class App {
    public static void main(String[] args) throws JSONException 
    {
        JSONObject jsonObject = new JSONObject();

        jsonObject.put("name", "batuhan");
        jsonObject.put("number", new String [] {"1234", "5678", "67887"});
        jsonObject.put("address", "marmaris");

        JSONObject obj = new JSONObject(jsonObject.toString());

        JSONArray array = obj.getJSONArray("number");

        for (int i = 0; i < array.length(); ++i) 
            System.out.println(array.get(i));

//        System.out.println(obj);

    }
}

Sınıfın getXXX metotları ile herhangi bir anahtara ilişkin değer elde edilebilir.

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class App {
    public static void main(String[] args) throws JSONException 
    {
        JSONObject jsonObject = new JSONObject();

        jsonObject.put("name", "batuhan");
        jsonObject.put("number", new String [] {"1234", "5678", "67887"});
        jsonObject.put("address", "marmaris");

        JSONObject obj = new JSONObject(jsonObject.toString());

        String name = obj.getString("name");

        System.out.println(name);

    }
}

Anahtar Notlar: Aşağıdaki gibi bir JSON formatı şu şekilde ayrıştırılabilir.

{
  "people": [
    ["batuhan", "1234", "123" ],
    ["ali", "12345"],
    ["burak", "123456", "4", "5", "6"]
  ]
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;

public class App {
    public static void main(String[] args) throws JSONException, FileNotFoundException 
    {
        InputStream is = new FileInputStream("people.json");

        InputStreamReader isr = new InputStreamReader(is);

        JSONObject jsonObject = new JSONObject(new JSONTokener(isr));

        JSONArray people = (JSONArray)jsonObject.getJSONArray("people");

        for (int i = 0; i < people.length(); ++i) {
            JSONArray array = (JSONArray)people.get(i);
            for (int k = 0; k < array.length(); ++k)
                System.out.print(array.get(k) + " ");

            System.out.println();
        }                                                
    }
}

Aşağıdaki gibi bir JSON formatının okunması şu kodla yapılabilir.

{
  "people": [
    {
      "name": "batuhan",
      "numbers": [
        "1234",
        "123"
      ]
    },
    {
      "name": "batu",
      "numbers": [
        "1234",
        "123",
        "456"
      ]
    },
    {
      "name":"bat",
      "numbers": [
        "1234",
        "123",
        "1223",
        "223243"
      ]
    }

  ]
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;

public class App {
    public static void main(String[] args) throws JSONException, FileNotFoundException 
    {
        InputStream is = new FileInputStream("people.json");

        InputStreamReader isr = new InputStreamReader(is);

        JSONObject jsonObject = new JSONObject(new JSONTokener(isr));

        JSONArray people = (JSONArray)jsonObject.getJSONArray("people");

        for (int i = 0; i < people.length(); ++i) {
            JSONObject obj = (JSONObject)people.get(i);

            String name = obj.getString("name");
            JSONArray array = obj.getJSONArray("numbers");

            System.out.print(name + " ");

            for (int k = 0; k < array.length(); ++k)
                System.out.print(array.get(k) + " ");

            System.out.println();
        }                                                
    }
}

Sınıf Çalışması 1 Bir Swing uygulaması ile içerisinde ad, soyad ve telefon numaraları olan kişi bilgilerini JSON formatı ile bir JSONObject Collection sınıfına ekleyiniz. Kaydet tuşuna basıldığında bunu txt bir dosya olarak diske yazdırınız.

Açıklama: 007-PeopleInformation Uygulamasını program açılırken dosyadan daha önce kaydedilmiş olan kişileri okuyan programı yazınız.

007-PeopleInformationJSON

Sınıf Çalışması 007PeopleInformationJSON uygulamasını Server/Client uygulaması biçimine getiriniz, her ekleme yapıldığında Server tarafta bir dosyada JSON formatında kaydedilsin ve bir arama butonu ile yeni bir frame açılsın buradaki textfield içerisine yazılan yazı Server'a gönderilerek, isme göre kişi araması yapılsın.

results matching ""

    No results matching ""