1 Nisan 2013 Pazartesi

Androidde Basit Json Parse İşlemi

Arkadaşlar merhabalar, basit olarak bir android cihazda json yapıları nasıl kullanılırız bugun biraz onlardan bahsedeceğim size genel olarak kodlar üzerinde açıklamalarda bulunarak anlatamaya çalışacağım.

İlk olarak yapmamız gereken yeni bir android projesi oluşturmak olacak.Yeni bir proje oluşturduktan sonra main layoutu içerisene bir textview nesnesi ekleyelim. 

json_ornek.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".JsonOrnek" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="174dp"
        android:text="TextView" />

</RelativeLayout>

2. olarak main activity içerisine kodlarımızı yazacağız.

  Basit bir json objesini parse edebilmemiz çoka basittr örneğin: json objemiz obj= {"ad":"gokhan","soyad":"aras"} olduğunu düşünelim yapmamız gereken tek şey bu nesneyi JSONObject jsonobj=new JSONObject(); parametre olarak gönderkmek olacaktır. JSONObject jsonobj=new JSONObject(obj); gibi

package gokhan.test.andoridjson;

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

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class JsonOrnek extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.json_ornek);
   
        TextView texview=(TextView) findViewById(R.id.textView1);
         //Json nesnesi
         String jsonvalue="{\"ad\":\"gokhan\",\"soyad\":\"aras\",\"numara\":\"09260509\"}";
       
        texview.setText(simpleJson(jsonvalue));
       
        
       
    }
    
// Json nesnesini parse etmeye yarayan method.
// Bu method gelen parametre değerindeki ad,soyad,numara değerlerini gösteremeye yarar.
    public String simpleJson(String jsonvalue){
       
        String data="";
        try {
            JSONObject jsonobj=new JSONObject(jsonvalue);
           
  //Burada dikkat etmemiz gereken konu json nesnesi değer isimlerini bilmemiz gerekmektedir. //Yoksa nesne içerindeki değerleri alamayız.           data=""+jsonobj.getString("ad")+"----"+jsonobj.getString("soyad")+"-----"+jsonobj.getString("numara");
           
           
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   
   
        return data;
       
    }
     
Bu işlemde tamamlandıktan sonra projemizi çalıştırdığımızda karşımıza şekildeki görüntü gelir.    


 Peki ya json objesi içerindeki etiket isimlerini bilmiyorsak nasıl yapacağız. Bu etiketlere karşılık gelen verileri alamıyacağızmı? Hayır tabikide öyle değil :) isimlerini bilmeden de global bir biçimde json objelerini kullanabilir bunun için bu basit uygulamada kullanabileceğimiz bir aşağıdaki kodu yazdım.

texview.setText(simpleJsonGlobal(jsonvalue)); // Main methodu içerisindeki textviewe set //ettğimiz değeri yeni method değeri ile değiştirelim

Daha sonra  simpleJsonGlobal methodunu projemize ekleyerek global bir biçimde json parse etme işlemini gerçekleştirebiliriz.


    public String simpleJsonGlobal(String jsonvalue){
       
        String data="";
        String names="";
        try {
            JSONObject jsonobj=new JSONObject(jsonvalue);
            for (int i = 0; i <jsonobj.names().length(); i++) {
                names=jsonobj.names().getString(i);
                data+=""+jsonobj.getString(names)+"----";
            }
       
           
           
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   
   
        return data;
       
    }
 json objelerini istediğimiz etkikette göndererek aynı sonucu elde edeceğiz
     String jsonvalue="{\"ad\":\"gokhan\",\"soyad\":\"aras\",\"numara\":\"09260509\"}";
     String jsonvalue="{\"ad1\":\"gokhan\",\"soyad1\":\"aras\",\"numara1\":\"09260509\"}"; 


 
Eğer elimizde bir json objesi değil bir json dizi objesi var ne yapcağız. Json dizi yapısını Json obje ile parse edemeyiz bunun için ise Javanın JSonArray kütüphanesi kullanacağız gelen objeyi dizi olarak tamınladıktan sonra tek tek nesneler halinde okumamız gerekmektedir. Bunu  yapmamız için aşağıdaki methodu kullanmamız yeterli olacaktır.

    public String simpleArrayJson(String jsonvalue){
       
        String data="";
        try {
            JSONArray jsonarray=new JSONArray(jsonvalue);
            for (int i = 0; i <jsonarray.length(); i++) {
                JSONObject jsonobj=jsonarray.getJSONObject(i);
           
         data +=""+jsonobj.getString("ad")+"----"+
         jsonobj.getString("soyad")+"-----"+jsonobj.getString("numara")+"\n";
            }           
   
                   
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   
   
        return data;
       
    }


Aynı şekilde etiket isimlerini bilmediğimizde bu dizide de işlem yapmak için global bir biçimde tnaımlamamız gerekmektedir. Bunun için ise aşağıdaki methodu kullanmamız gerekir.

public String simpleGolobalArrayJson(String jsonvalue){
       
        String data="",names="";
        try {
            JSONArray jsonarray=new JSONArray(jsonvalue);
            for (int i = 0; i <jsonarray.length(); i++) {
                JSONObject jsonobj=jsonarray.getJSONObject(i);
                for (int j = 0; j <jsonobj.names().length(); j++) {
                    names=jsonobj.names().getString(j);
                    data+=""+jsonobj.getString(names)+"----";
                }
           
                data +="\n";
            }           
   
                   
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   
   
        return data;
       
    }
Projenin Son Hali ise aşağıdaki biçimde olur 
Projeyi indirmek için tıklayınız

Gökhan Turan Aras
Kolay Gelsin :)