¿Cómo verificar si existe una clave json?

Entonces, obtengo algunos valores JSON del servidor pero no sé si habrá un campo en particular o no.

Asi como:

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

Y a veces, habrá un campo adicional como:

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

Me gustaría comprobar si el campo llamado “club” existe para que al analizar no obtenga org.json.JSONException: sin valor para el club

La clase JSONObject tiene un método llamado “has”:

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

Devuelve true si este objeto tiene una asignación para el nombre. La asignación puede ser NULL.

Puede verificar de esta manera donde ‘HAS’ – Devuelve verdadero si este objeto tiene una asignación para el nombre. La asignación puede ser NULL.

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

También puede verificar usando ‘isNull’ – Devuelve true si este objeto no tiene una asignación para el nombre o si tiene una asignación cuyo valor es NULL.

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

usted podría tener JSONObject#has , proporcionando la key como entrada y verificando si el método devuelve true o false . También podrías

utilice optString lugar de getString :

Devuelve el valor correlacionado por nombre si existe, coaccionándolo si es necesario. Devuelve la cadena vacía si no existe tal mapeo

Puedes usar has

 public boolean has(String key) 

Determine si el JSONObject contiene una clave específica .

Ejemplo

 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 } 

justo antes de leer la clave, compruébalo como antes de leer

 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 } 

definición de función isNull

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

documentación oficial debajo del enlace para la función isNull

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

Prueba esto

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

Una mejor manera, en lugar de usar un condicional similar:

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

es simplemente usar el método existente optString (), como este:

 String club = json.optString("club); 

el método optString (“clave”) devolverá un String vacío si la clave no existe y, por lo tanto, no arrojará una excepción.

 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; 

funciona en todos los navegadores actuales.

Solo estoy agregando otra cosa, en caso de que solo quiera comprobar si se ha creado algo en JSONObject o no, puede usar length (), porque de forma predeterminada cuando se inicializa JSONObject y no se inserta ninguna clave, solo tiene llaves vacías {} y usar has (tecla String) no tiene sentido.

Entonces puede escribir directamente if (jsonObject.length() > 0) y hacer sus cosas.

¡Feliz aprendizaje!