Mobil cihazlarda internet üzerinden veri alışverişi yapıyorsanız taşıdığınız verinin boyutunun ciddi bir önem taşıdığını bilirsiniz. Yani ne kadar az boyutta veri taşıyorsanız o kadar hızlı ve sorunsuz iletişim kurarsınız.

İşte JSON burada devreye giriyor. Bu hafif, karakter tabanlı ve açık standart ile okunabilir veri taşıma özellikle mobil cihazlarda çok iyi destekleniyor ve işimizi oldukça kolaylaştırıyor.

Bu makalemde objeden nasıl JSON üretebileceğimiz ve bir veriyi nasıl deserialize edip bir objeye yazabileceğimizden bahsedeceğim.

Serializasyon

Objemizi türeteceğimiz sınıf aşağıdaki gibi olacak.

public class Person {
  private String name, surname;
  private Integer age;
  private Double income;
  private Boolean married;
  private String[] children;

  private Person() {
  }

  public Person(String name, String surname, Integer age, Double income,
		  Boolean married, String[] children) {
    setName(name);
    setSurname(surname);
    setAge(age);
    setIncome(income);
    setMarried(married);
    setChildren(children);
  }

  public String getName() {
    return name;
  }

  private void setName(String name) {
    this.name = name;
  }

  public String getSurname() {
    return surname;
  }

  private void setSurname(String surname) {
    this.surname = surname;
  }

  public Integer getAge() {
    return age;
  }

  private void setAge(Integer age) {
    this.age = age;
  }

  public Double getIncome() {
    return income;
  }

  private void setIncome(Double income) {
    this.income = income;
  }

  public Boolean getMarried() {
    return married;
  }

  private void setMarried(Boolean married) {
    this.married = married;
  }

  public String[] getChildren() {
    return children;
  }

  private void setChildren(String[] children) {
    this.children = children;
  }
}

Bu türettiğimiz objemizi JSON objesine çevirmek için sınıfımıza ek bir metot yazalım.

public String getJSONString() throws JSONException {
  return getJSONObject().toString();
}

public JSONObject getJSONObject() throws JSONException {
  JSONObject json = new JSONObject();

  json.put("name", getName());
  json.put("surname", getSurname());
  json.put("age", getAge());
  json.put("income", getIncome());
  json.put("married", getMarried());

  JSONArray children = new JSONArray();

  for (String child : getChildren()) {
    children.put(child);
  }

  json.put("children", children);

  return json;
}

Bu sınıfımızdan bir kişi objesi üretelim.

Person person = new Person("John", "Doe", 35, 2345.67, true, new String[] {"Daniel", "Mia"});

Aşağıdaki gibi kişi objemizin getJSONString() methodunu çağırarak string’e dönüştürülmüş JSON objemizi alalım.

String json = person.getJSONString();

Aldığımız JSON objesi aşağıdaki çıktıyı verir.

{"name":"John","surname":"Doe","age":35,"income":2345.67,"married":true,"children":["Daniel","Mia"]}

Deserializasyon

Herhangi bir şekilde bir JSON veriyi aldığımızda bunu da objemize yazabilmeliyiz. Bu işlem için objemize bir statik metot daha ekleyelim.

public static Person loadJSONObject(String json) throws JSONException {
  JSONObject jsonObject = new JSONObject(json);

  Person person = new Person();
  person.setName(jsonObject.getString("name"));
  person.setSurname(jsonObject.getString("surname"));
  person.setAge(jsonObject.getInt("age"));
  person.setIncome(jsonObject.getDouble("income"));
  person.setMarried(jsonObject.getBoolean("married"));

  JSONArray jsonArray = jsonObject.getJSONArray("children");

  String[] children = new String[jsonArray.length()];
  for(int i = 0; i < children.length; i++) {
    children[i] = jsonArray.getString(i);
  }

  person.setChildren(children);

  return person;
}

Aşağıdaki gibi bu ürettiğimiz methodu çağırarak JSON objesini JAVA objemize yükleyebildik..

Person person = Person.loadJSONObject("{\"name\":\"John\",\"surname\":\"Doe\",\"age\":35,\"income\":2345.67,\"married\":true,\"children\":[\"Daniel\",\"Mia\"]}");

İleriki günlerde benzer verileri web-servisten alıp işleyebileceğimiz makaleler yazmayı planlıyorum. Şimdilik hoşçakalın.