Soru & Cevap

Android json key duzeni

12.10.2013 - 12:27

{

  • "birinci":[],
  • "ikinci":[],
  • "ucuncu":[],
  • "dorduncu":[],
  • "besinci":[],
  • "altinci":[],
  • "yedinci":[],
  • "sekizinci":[],
  • "dokuzuncu":[],
  • "onuncu":[],
  • }
  • boyle bir json ornegim var ve ben burdaki keylerin isimlerini

 

              Iterator<String> iter = json.keys();

                while (iter.hasNext()) {

                    String key = iter.next();

                   }

bu kodla alabiliyorum fakat sirayla birinci ikinci... seklinde getircegine karisik karisik getiriyor . Sirali bir sekilde alabilmemi saglayacak bir seyler biliyormusunuz acaba ?

23 Görüntülenme

5 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user sultan
sultan
23.10.2013 - 11:31

Merhaba Erdem Bey,

Sizin ilk verdiginiz ornekdeki gibi bir jsonparser ornegi kullaniyorum demekki ondan dolayi sirali olarak erisemiyorum. 

Sizin verdiginiz ornkleri inceledim ama tam olarak kullanamadim.

verilerimi bir url den alicam ve  buradaki ornegi inceledim

http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html

Burdaki ornek hata veriyor cozumunu bulamadim ama dedigim gibi bu ornekdeki json urlinden yola cikarsak errors arrayi var benm istedigimde errors gibi birden fazla array var ve bunlari sirali bir sekilde elde etmek istiyorum...

picture-333-1371126916.png
erdem.gunay
21.10.2013 - 02:21

Sultan merhaba,

muhtemelen şu adreste belirtilen gibi bir JSONParser sınıfı kullanıyorsun, bu sınıf org.json.JSONObject türünde bir nesne üretiyor.

http://www.androidhive.info/2012/01/android-json-parsing-tutorial/

org.json.JSONObject nesnesi "unordered" olduğu için sana gelen JSON datasındaki sırayı geri alma şansın bulunmuyor. 

 

Bunun yerine google-gson kütüphanesini kullanmanı önereceğim, 

http://code.google.com/p/google-gson/

bu adresten "google-gson-2.2.4-release.zip" dosyasını indirip içindeki gson-2.2.4.jar dosyasını projenin libs klasörü altına atman yeterli, sonrasında aşağıdaki gibi com.google.gson.JsonObject nesnesi elde edip bu nesne üzerinden verilerine erişebilirsin,

        String jsonStr = "{\"birinci\":[],\"ikinci\":[]}";
        Reader in = new StringReader(jsonStr);

        Gson gson = new Gson();
        JsonObject jsonObject = gson.fromJson(in, JsonObject.class);

        System.out.println("eleman sayisi : " + " " + jsonObject.entrySet().size());
        for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
            System.out.println(entry.getKey());
        }
        

HTTP ile bir sunucudaki Json verisine erişmek istersen JSONParser.java'dakine benzer bir kod yazıp önce JSON stringine erişip bunu gson.fromJson methoduna geçirebilirsin. Ayrıca google-gson kullanarak gelen JSON stringini hazırlayacağın bir model nesnesine dönüştürülmüş bir şekilde de okutabilirsin, bir örneğini şu adreste bulabilirsin;

http://tech.xtremelabs.com/even-better-parsing-of-json-data-on-android/

        try {

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

 

** ek bilgi ihtiyacın olursa lütfen çekinme

picture-333-1371126916.png
erdem.gunay
21.10.2013 - 11:18

Sultan merhaba, 

JSONParser sınıfını herhangi bir üçüncü parti kütüphaneden mi kullanıyorsun? yoksa internetten kodunu bulup kullandığın bir sınıf mı? 

 

Profile picture for user sultan
sultan
14.10.2013 - 09:12

JSONParser  jParser = new JSONParser();

 JSONObject json= jParser.getJSONFromUrl(url);

Ben burda json i parse ediyorum json i nasil hash mapde tutabilirim kod olarak ornek verebilirmisiniz ?

picture-3606-1408610132.jpg
cgural
12.10.2013 - 01:53

Oradaki json referansı List veya türevi bir nesne değilse (örneğin HashMap ise) iterator'dan sıralı çıktı üretemezsiniz. Aldığınız JSON node'larını sıralamayı garantileyen bir koleksiyonda tutmalısınız. LinkedHashMap gibi.