3 Şubat 2014 Pazartesi

JAVA İLE JSON PARSE ETME

Önceki yazılarımdan birinde XML parse etmeyi ele almıştım.Bu yazımda başka bir kategorileme dili olan JSON un nasıl parse edildiğini ele alacağım.
JSON, javascript'in bir alt kümesi olan düzenli bir şekilde XML gibi içerik kategorileme dilidir. JSON XML'e göre daha da hızlıdır, daha pratiktir. XML gibi bütün programlama dillerinde etkin bir şekilde kullanılabilir.
Yapı olarak XML e çok benzeyen JSON tipinin ana amacı veri alış verişi yaparken daha küçük boyutlarda veri alıp göndermektir. Ayrıca kullanımı da çok kolaydır.
XML ve JSON karşılaştırması için bir örnek verelim. Bunun için Müşteri datalarını tuttuğumuzu varsayalım.

XML Örneği

01
<musteriler>
02
<musteri>

03
<kod>120.01.001</kod>
04
<ad>Microsoft</ad>

05
<unvan>Microsoft AŞ.</unvan>
06
</musteri>

07
<musteri>
08
<kod>120.01.002</kod>

09
<ad>Google</ad>
10
<unvan>Google AŞ.</unvan>

11
</musteri>
12
<musteri>

13
<kod>120.01.003</kod>
14
<ad>Yahoo</ad>

15
<unvan>Yahoo AŞ.</unvan>
16
</musteri>

17
<musteri>
18
<kod>120.01.004</kod>

19
<ad>Apple</ad>
20
<unvan>Apple AŞ.</unvan>

21
</musteri>
22
</musteriler>



Şimdide bunu JSON ile ifade edelim.
01
{musteriler:[
02
{

03
"kod":"120.01.001",
04
"ad"="Microsoft",

05
"unvan"="Microsoft AŞ",
06
}

07
{
08
"kod":"120.01.002",

09
"ad"="Google",
10
"unvan"="Google AŞ",

11
}
12
{

13
"kod":"120.01.003",
14
"ad"="Yahoo",

15
"unvan"="Yahoo AŞ",
16
}

17
{
18
"kod":"120.01.004",

19
"ad"="Apple",
20
"unvan"="Apple AŞ",

21
}
22
]}


Gördüğünüz üzere kodumuz oldukça azaldı ve yazması-okumasıda kolaylaştı.
Böyle 3-5 elemanlı örneklerde per bir performans göremesenizde 1000-2000 elemanlı örneklerde performans oldukça farkedecektir.
Java ile JSON okumak için org.json kütüphanesine ihtiyaç duyacağız.Bu kütüphaneyi buradan indirebilirsiniz.Kütüphaneyi projemize ekledikten sonra artık kodlama kısmına geçebiliriz.


JsonReader.java

public class JsonReader {
        private static String readAll(Reader rd) throws IOException {
        StringBuilder sb = new StringBuilder();
        int cp;
        while ((cp = rd.read()) != -1) {
            sb.append((char) cp);
        }
        return sb.toString();
    }

  
 public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
        InputStream is = new URL(url).openStream();
        try {
            BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
            String jsonText = readAll(rd);
            JSONObject json = new JSONObject(jsonText);
            return json;
        } finally {
            is.close();
        }
    }

    public static void main(String[] args) throws IOException, JSONException {
        JSONObject json = readJsonFromUrl("http://findyourmp.parliament.uk/api/search?q=bob&f=js");
        System.out.println(json.toString());
        for (int i = 0; i < json.getJSONObject("results").getJSONArray("members").length(); i++) {
            System.out.println("İsim:" + json.getJSONObject("results").getJSONArray("members").getJSONObject(i).get("member_name"));
        }
    }


Bu kodların çıktısı aşağıda ki gibi olur.





1 yorum:

  1. A JSONObject text must begin with '{' at 1 [character 2 line 1] hatası veriyor kod

    YanıtlaSil