2012-05-15 18 views
15

tengo JSON Archivo como por debajo del cual tiene que ser vertida en un ArrayList:Comprobar si un objeto JSON en particular está disponible o no

{ 
"main1" : [ 
    { 
    "child1" : valueA, 
    "child2" : valueB, 
    "child3" : valueC, 
    }, 
    { 
    "child1" : value1, 
    "child3" : value3, 
    }, 
], 
"main2" : "valueMain2" 
} 

El elemento child2 ha de comprobar si existe o no, y entonces el se toma valor Puedes ver que no aparece en la segunda matriz.

estoy usando JSON nativo (org.JSON) del código de Java es el siguiente:

ArrayList<HashMap<String,String>> myList = new ArrayList<HashMap<String,String>>(); 
JSONObject json = <my_json_object>; 

JSONObject getchild2; 

JSONArray jArray = <my_json_object>.getJSONArray("main1"); 
for(int j = 0; j < jArray.length(), j++){ 
    HashMap<String,String> map = new HashMap<String,String>(); 

    map.put("First Value", jArray.getJSONObject(j).getString("child1")); 
    map.put("Third Value", jArray.getJSONObject(j).getString("child3")); 

    getchild2 = jArray.getJSONObject(j).getJSONObject("child2"); 
    if(getchild2 == null){ 
    map.put("Second Value", "Some Dummy Value"); 
    } else { 
    map.put("Second Value", jArray.getJSONObject(j).getString("child2")); 
    } 
myList.add(map); 
} 

¿Cómo puedo lograr esto?

<my_json_object> utiliza análisis de la URL nativa como llegue a la respuesta HTTP de una petición de URL encontrar aquí: http://mobisys.in/blog/2012/01/parsing-json-from-url-in-android/

No funciona como un error es el siguiente:

E/AndroidRuntime(664): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
+1

Por favor, pegue el código y el error si obtiene – UVM

+0

¿Puede por favor pegar el código java, cómo se está convirtiendo json en objeto json? – pavi

+0

¡Código agregado! Por favor, compruebalo y hazmelo saber. – curlyreggie

Respuesta

37

De todos modos, tengo la solución con algunas google: Me re-enmarcado como,

if (!jArray.getJSONObject(j).has("child2")) { 
    map.put("Second Value", "N.A"); 
} else { 
    map.put("Second Value", jArray.getJSONObject(j).getString("child2")); 
} 

Creación de la getchild2 = jArray.getJSONObject (j) .getJSONObject JSONObject ("child2"); fue más bien, innecesario.

¡Y esto funciona, perfectamente! Remita esto para más detalles: Checking if exists subObject in JSON

¡Gracias a todos por la ayuda!

+1

quiero verificar si existe algún valor jsonal objeto o no? como aquí {"ValidateUserResult": [{"Sys_User_ID": 69, "my_id": 23}]} quiero comprobar en respuesta ¿la cadena "my_id" está disponible o no? ¿alguien tiene idea al respecto? – CoDe

+0

Extiende la misma cosa que di la solución. Debería estar lo suficientemente bien. – curlyreggie

+0

Tengo el siguiente archivo JSON: http://pagesbyz.com/test.json y me encuentro con el mismo problema. Aquí está mi pregunta: http://stackoverflow.com/questions/19868439/how-to-put-json-information-in-an-array-to-use-it-for-displaying-in-listview (Si hay una entrada en blanco, el archivo JSON ya no se analiza: /) Realmente agradecería su ayuda. – Si8

-2

Prueba esto:

{"main1" : [{ 
      "id":"1" 
       "child1" : "valueA", 
       "child2" : "valueB", 
       "child3" : "valueC", 
      }, { 
       "id":"2" 
        "child1" : "value1", 
       "child3" : "value3", 
      }] 
} 
10
getJSONObject("child2"); 

Lanzará una excepción si child2 no existe. Tal vez puedas probar:

getchild2 = jArray.getJSONObject(j).optJSONObject("child2"); 

De esa manera usted no tiene que capturar una excepción si child2 no existe y en su lugar puede comprobar nula.

+0

¡Hermoso! Esto funcionó. ¡¡Gracias!! – curlyreggie

+0

Pero tengo problemas. ¿Cómo obtener el valor 'valueB' si el objeto existe? Intenté usar el mismo código. No fue capaz de obtenerlo – curlyreggie

+0

Ahora lo reformulé, 'JSONObject getchild2 = jArray.getJSONObject (j) .optJSONObject (" child2 "); if (getchild2 == null) { map.put ("calificación", "N.A"); } else { map.put ("rating", jArray.getJSONObject (j) .getString ("child2")); } ' El hecho es que el resultado debe devolver un valor, pero no regresa. Siempre apunta a "N.A" como resultado. ¿Qué estoy haciendo mal? – curlyreggie

Cuestiones relacionadas