Bir json anahtarının olup olmadığını nasıl kontrol edebilirim?


165

Yani, sunucudan bazı JSON değerleri alıyorum ama belirli bir alan olup olmayacağını bilmiyorum.

Gibi:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited"
}

Ve bazen, aşağıdaki gibi ekstra bir alan olacaktır:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited",
  "club":"somevalue"
}

Ayrıştırma sırasında org.json.JSONException: Kulüp değeri yok diye "club" adlı alanın mevcut olup olmadığını kontrol etmek istiyorum.


if (jsonObject.getString ("club")! = null) {// buradan vale al}
Software Sainath

3
Hayır, kod işleme istisnası durur ve diğer ayrıştırma eylemleri çalışmaz.
Adam Varhegyi

1
@SoftwareSainath Bu çalışmıyor, hala istisna var.
Adam Varhegyi

String clubvalue = ""; dene (clubvalue = jsonobject.getString ("club");} catch (Exception e) {}
Yazılım Sainath

Yanıtlar:


266

JSONObject sınıfının "has" adlı bir yöntemi vardır:

http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)

Bu nesnenin ad için bir eşlemesi varsa true değerini döndürür. Eşleme NULL olabilir.


28
çünkü "içerir" çok bayat? :)
Omri374

Anahtar türdeyse ne olur Integer?
Eido95

2
@ Eido95 Integeranahtar olarak sahip olmak kötü uygulama gibi geliyor. JSON, bir String anahtarıyla ve ihtiyacınız olan her şeyin değerinde olmalıdır.
Nico

@ Eido95, bir tamsayı için her zaman bir değer olduğuna inanıyorum, bir tamsayıyı her bildirdiğinizde, bir değerle başlatmanız gerekir.
mut tony

154

Bu şekilde 'HAS' - Bu nesnenin ad için bir eşlemesi varsa true değerini döndürür. Eşleme NULL olabilir.

if (json.has("status")) {
   String status = json.getString("status"));
}

if (json.has("club")) {
   String club = json.getString("club"));
}

'İsNull' kullanarak da kontrol edebilirsiniz - Bu nesnenin ad için eşlemesi yoksa veya değeri NULL olan bir eşlemesi varsa true değerini döndürür.

if (!json.isNull("club"))
    String club = json.getString("club"));

1
hangi json
lib'i

@samuelowino json nesnenizi içeren değişken
Fernando Torres

17

Eğer olabilir JSONObject#has, sağlama keyyöntemi getiriler ise giriş ve çek olarak trueya false. Ayrıca yapabilirdin

optStringyerine kullanın getString:

Varsa adla eşlenen değeri, gerekirse zorlayarak döndürür. Böyle bir eşleme yoksa boş dizeyi döndürür


1
Bu yöntem başkaları için kullanılabilir olsa da, değer varsa bu geri gelmez. Eğer getStringboş bir dize döndürülür olurdu, optStringayrıca boş bir dize dönecekti. Varsayım, mülkün OP durumunda mevcut olmadığına inanmanızı sağlayacaktır.
halfpastfour.am

@Blackbelt Bunun için kaynaklarınız var mı?
tsuz

10

Kullanabilirsiniz has

public boolean has(String key)

JSONObject öğesinin belirli bir anahtar içerip içermediğini belirleyin .

Misal

JSONObject JsonObj = new JSONObject(Your_API_STRING); //JSONObject is an unordered collection of name/value pairs

if (JsonObj.has("address")) { 
    //Checking address Key Present or not
    String get_address = JsonObj .getString("address"); // Present Key
}
else {
    //Do Your Staff
}

10

okuma anahtarından hemen önce okumadan önce olduğu gibi kontrol edin

JSONObject json_obj=new JSONObject(yourjsonstr);
if(!json_obj.isNull("club"))
{
  //it's contain value to be read operation
}
else
{
  //it's not contain key club or isnull so do this operation here
}

isNull işlev tanımı

Returns true if this object has no mapping for name or
if it has a mapping whose value is NULL. 

isNullişlev bağlantısı için aşağıdaki resmi belgeler

http://developer.android.com/reference/org/json/JSONObject.html#isNull(java.lang.String)


2

Bunu dene

if(!jsonObj.isNull("club")){
    jsonObj.getString("club");
}

2
isNullaslında eşlemenin boş olup olmadığını kontrol etmek içindir, json üyesinin kullanılabilirliğini kontrol etmek için değildir.
Reza_Rg

2

Şöyle bir koşullu kullanmak yerine daha iyi bir yol:

if (json.has("club")) {
    String club = json.getString("club"));
 }

varolan optString () yöntemini şu şekilde kullanmaktır:

String club = json.optString("club);

anahtar mevcut değilse ve bu nedenle size bir istisna atmazsa optString ("key") yöntemi boş bir String döndürür.


2

Json adlı bir yöntem var containsKey().

Json setinde belirli bir anahtarın bulunup bulunmadığını kontrol etmek için kullanabilirsiniz.

File jsonInputFile = new File("jsonFile.json"); 
InputStream is = new FileInputStream(jsonInputFile);
JsonReader reader = Json.createReader(is);
JsonObject frameObj = reader.readObject();
reader.close();

if frameObj.containsKey("person") {
      //Do stuff
}

1
I used hasOwnProperty('club')

var myobj = { "regatta_name":"ProbaRegatta",
    "country":"Congo",
    "status":"invited"
 };

 if ( myobj.hasOwnProperty("club"))
     // do something with club (will be false with above data)
     var data = myobj.club;
 if ( myobj.hasOwnProperty("status"))
     // do something with the status field. (will be true with above ..)
     var data = myobj.status;

mevcut tüm tarayıcılarda çalışır.


1

Bunu dene:

let json=yourJson

if(json.hasOwnProperty(yourKey)){
    value=json[yourKey]
}

1

Anahtarın var olup olmadığını kontrol etmek için bunu deneyebilirsiniz:

JSONObject object = new JSONObject(jsonfile);
if (object.containskey("key")) {
  object.get("key");
  //etc. etc.
}

0

Sadece az önce birşey JSONObject nesnesi oluşturulur olmadığını kontrol etmek istiyorsanız veya kullanabilirsiniz değil durumda, başka bir şey ekliyorum uzunluğu JSONObject nesnesi başlatılır ve hiçbir tuşa takıldığında çünkü varsayılan olarak) (, sadece boş köşeli parantezler vardır {}ve kullanan vardır (String tuşu) hiçbir anlam ifade etmiyor.

Böylece if (jsonObject.length() > 0)eşyalarınızı doğrudan yazıp yapabilirsiniz.

Mutlu öğrenme!


0

Sen kullanabilirsiniz JsonNode # hasNonNull (Dize fieldName) , bu karıştırmak vardır o ise yöntem ve doğrulama boş değer ya da değil

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.