Parse JSON sin sucesión de bloques Try-Catch

Quisiera analizar un JSON, pero cada vez que consigo un valor, tengo que poner la instrucción en un bloque try-catch. Aquí hay un ejemplo:

try { this.setID(jsonObject.getLong("id")); } catch (JSONException e) { } try { this.setName(jsonObject.getString("name")); } catch (JSONException e) { } //and so on.... 

No me importa si una instrucción surge una excepción. Así que me preguntaba si es posible eliminar todos los bloques try-catch y poner las instrucciones en conjunto.

En realidad, es más un problema de Java y no sólo un problema de Android ….

EDITAR

Acaba de aclarar cuál es el problema. Cuando surge una excepción porque no hay la etiqueta que buscaba, continuaría con la siguiente comprobación de etiquetas en lugar de manejar la excepción. Para hacer esto, tengo que escribir el código como he publicado anteriormente, por lo tanto una sucesión de try-catch bloques. Buscaba una solución más rápida (y más elegante).

Puede utilizar los métodos opt lugar de los métodos get , suponiendo que está bien que las claves no existan. Si las claves no son opcionales y su aplicación no puede recuperarse de aquellos campos que no son todos existentes, debería utilizar definitivamente los métodos get y fallar rápidamente si se produce un error.

Otro método útil que puede utilizar es el método has() . Esto comprueba si hay una asignación para una clave dada. (por ejemplo, if (json.has("id") id = json.optString("id")) ).

Tal vez no entiendo lo que estás pidiendo, pero ¿por qué no pones todas las llamadas a jsonObject dentro del mismo bloque try-catch?

 try { this.setID(jsonObject.getLong("id")); this.setName(jsonObject.getString("name")); } catch (JSONException e) { } 

Nunca debes tragar excepciones. Por lo menos registrar un error.

Como @Sotirios estaba diciendo que no puedes ignorar una excepción json.

Puede poner toda su lectura json en un método y hacer que el método lance la JSONException, como esto:

  public void readJson(String json) throws JSONException{ this.setID(jsonObject.getLong("id")); this.setName(jsonObject.getString("name")); } 

pero el acero tiene que hacer un try catch cuando se llama a ese método:

  try { readJson(jLine); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

Creo que es más un problema de biblioteca que cualquier otra cosa. Un par de bibliotecas JSON en Java tienden a agregar excepciones en sus llamadas a la biblioteca como si el diseñador quisiera usar códigos de estado de error C invasivos pero con el peso añadido de la sintaxis de excepciones de Java. Puedo entender parcialmente los motivos de tal interfaz, pero se ve muy poco elegante.

Yo sugeriría usar json-simple , que es demasiado simple a veces, pero consigue el trabajo hecho y se queda fuera del camino.

Reemplazar

 jsonObject.getFoo("key") 

con

 jsonObject.optFoo("key") 

Si no se encuentra la clave, se devuelve un valor predeterminado null o similar en lugar de una excepción.

Si desea una sintaxis más limpia, debe buscar en gson . Si sabes cómo será el json, nada lo supera.

Si su JSON se parece a esto:

 { "id": 432942039, "name": "My name", "values": [0, 1, 2, 3] } 

Se creará una clase POJO que tenga este aspecto:

 public class MyClass { public MyClass() {} private long id; private String name; private int[] values; } 

Y analizarlo así:

 private parse(String jsonString) { Gson gson = new Gson(); MyClass myObject = gson.fromJson(jsonString, MyClass.class); } 

Y eso es. No se necesitan setters; utiliza la reflexión para coincidir con los campos. No hay anotaciones. No hay errores si hay campos en su cadena JSON que no coinciden con nada en su POJO y viceversa.

  • Código de respuesta inesperado 500 para el método POST
  • JSONArray a HashMap
  • ¿Cómo convertir una matriz json en un objeto json en android usando gson?
  • Error StrictMode $ AndroidBlockGuardPolicy.onNetwork
  • HttpClient.execute lanzando OutOfMemoryError
  • Http Get Request devuelve html?
  • Json Parsing de Url en Android, no funciona
  • Grupo de día en el Android?
  • Cómo crear un objeto Json anidado en Java?
  • ¿Cómo obtener valores de Internet y una matriz String y pasarla a una vista de cuadrícula en Android?
  • Conexión de Android a localhost
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.