2012-05-14 26 views
66

Json değeri null olduğunda nasıl tespit edebilirim? örneğin : [{ "kullanıcı adı": null}, { "kullanıcı adı", "boş"}]Android Json ve boş değerleri

birinci durum, bir unexisting adı ve "boş" olarak adlandırılan ikinci bir kullanıcıyı temsil eder. Bunları almak için deneyin eğer her iki değer dizesi "boş" neden

JSONObject json = new JSONObject("{\"hello\":null}"); 
json.put("bye", JSONObject.NULL); 
Log.e("LOG", json.toString()); 
Log.e("LOG", "hello="+json.getString("hello") + " is null? " 
       + (json.getString("hello") == null)); 
Log.e("LOG", "bye="+json.getString("bye") + " is null? " 
       + (json.getString("bye") == null)); 

günlük çıkış

{"hello":"null","bye":null} 
hello=null is null? false 
bye=null is null? false 
+1

JSON? O zaman kullanıcı adı alanını göndermeyin ve '' (java.lang.String); 'metodunu kullanın – Blundell

+0

@Blundell Yorumunuz için teşekkürler, yardımcı oldu. –

+2

Bu bilinen bir * ve kasıtlı * hatadır: http://code.google.com/p/android/issues/detail?id=13830 – Heinzi

cevap

3

ilk onay .... ...

if ((resultObject.has("username") 
    && null != resultObject.getString("username") 
    && resultObject.getString("username").trim().length() != 0) 
     { 
       //not null 
     } 

ve null değerini kontrol etmek cant'iş sonra

belows denemek ve aynı zamanda JSONObject.NULL varsa Sizin davanızda resultObject.getString("username").trim().eqauls("null")

+0

"if (! ResultObject.isNull (" kullanıcı adı ") && resultObject.getString (" kullanıcı adı "). Trim(). Length()! = 0)" –

13

Ayrıca, JSONObject # getString, t o anahtar var verdi, tanım gereği boş değil. JSONObject.NULL var nedenidir: null JSON değerini temsil etmek için.

json.getString("hello").equals(JSONObject.NULL); // should be false 
json.getString("bye").equals(JSONObject.NULL); // should be true 
+1

Cevabınız için teşekkürler ama imho ve bir JSONException atıldığından beri anahtar yoksa, null öğe sıfır olduğunda döndürme daha mantıklı ise null – Addev

+0

Kitaplığın geliştiricileriyle stil tercihlerini almanız gerekir: p – Vulcan

+1

"null"! = null. Sorun şu ki, NED'in 9+ api ihtiyacı var ve bazen çalışmak için daha düşük apis istiyorsun. Bu cevap iyi, jsonObject.getString! = "Null" değerini kullanabilirsiniz. – sagits

3

sen eğer hayır bir JSONException yükseltecek android için bu

Parser

Object data = json.get("username"); 

Handler

if (data instanceof Integer || data instanceof Double || data instanceof Long) { 
    // handle number ; 
} else if (data instanceof String) { 
    // hanle string;    
} else if (data == JSONObject.NULL) { 
    // hanle null;     
} 
12

deneyelim, sonra nesne ilk json ayrıştırmak ve idare gerekiyorsa böyle bir haritalama var. Yani bu yöntemi doğrudan arayamazsınız. Eğer verileri (anahtar olmayabilir) boş olabilir eğer

json.getString("bye") 

,

json.optString("bye","callback string"); 

veya

json.optString("bye"); 

yerine deneyin. demo kodunda

,

JSONObject json = new JSONObject("{\"hello\":null}"); 
json.getString("hello"); 

Alacağınız bu dize ise "boş" boş değil.Böyle

public String getJsonString(JSONObject jso, String field) { 
    if(jso.isNull(field)) 
     return null; 
    else 
     try { 
      return jso.getString(field); 
     } 
     catch(Exception ex) { 
      LogHelper.e("model", "Error parsing value"); 
      return null; 
     } 
} 

ve sonra bir şey:

senin Burada

if(json.isNull("hello")) { 
    helloStr = null; 
} else { 
    helloStr = json.getString("hello"); 
} 
1

Ben sadece bir satır kod ile JSON dizeleri alabilmeleri için kullanmak, yardımcı bir yöntem var kullanmak sınırlandırmak
String mFirstName = getJsonString(jsonObject, "first_name"); 

, dize değerinizi verir veya dize değişkeninizi güvenli bir şekilde null değerine ayarlar. Gson'u, bu gibi tuzaklardan kaçınmak için kullanabiliyorum. Benim düşünceme göre boş değerleri çok daha iyi idare ediyor.

İlgili konular