Analizar el objeto JSON con gson

Estoy tratando de analizar JSON como:

{"response":[123123, 1231231, 123124, 124124, 111111, 12314]} 

Con GSON, haciendo

 Gson gson = new GsonBuilder().create(); int[] friends = new Gson().fromJson(answer, int[].class); System.out.print(friends[0]); 

Pero obtenga el Error Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2

¿Cómo analizar estos números en la matriz?

Vas a querer crear primero una clase de modelo GSON puede enlazar tu json a:

 public class ResponseModel { private List<Integer> response = new ArrayList<Integer>(); public List<Integer> getResponse() { return response; } @Override public String toString() { return "ResponseModel [response=" + response + "]"; } } 

Entonces usted puede llamar

 Gson gson = new Gson(); ResponseModel responseModel = gson.fromJson("{\"response\":[123123, 1231231, 123124, 124124, 111111, 12314]}", ResponseModel.class); List <Integer> responses = responseModel.getResponse(); // ... do something with the int list 

La otra opción que tiene fuera de usar una clase de contenedor es simplemente para obtener la matriz del árbol de análisis.

Utilice el JsonParser para crear el árbol, obtenga su matriz de él, y luego convertir a int[] utilizando Gson :

 public class App { public static void main( String[] args ) throws IOException { String json = "{\"response\":[1,2,3,4,5]}"; JsonObject jo = new JsonParser().parse(json).getAsJsonObject(); JsonArray jsonArray = jo.getAsJsonArray("response"); int[] myArray = new Gson().fromJson(jsonArray, int[].class); System.out.println(Arrays.toString(myArray)); } } 

Tenga en cuenta que también podría trabajar con JsonArray directamente y no convertirlo en un int[] dependiendo de su caso de uso.

 System.out.println(jsonArray.get(0).getAsInt()); 

BEGIN_ARRAY pero fue BEGIN_OBJECT significa al principio que es Object no el array. Si usted verá en el Json, la propiedad response es el tipo de objeto y ese objeto contiene además el array. Puede analizarlo de diferentes maneras Utilizando la creación de su propia clase de modelo personalizado o sin crear una clase de modelo personalizada. Si no desea crear su clase de modelo de respuesta, simplemente analizarla

 final Type typeOf = new TypeToken<Map<String, List<Integer>>>() {}.getType(); final Map<String, List<Integer>> map = new Gson().fromJson(Your_JSON_String, typeOf); // finally get list of ints form map. final List<Integer> listOfIntegers =map.get("response"); 

Pruebe este método

 String json1 = "[{\"contactName\":\"3\",\"contactNumber\":\"3\"},{\"contactName\":\"4\",\"contactNumber\":\"4\"}]"; JsonElement json = new JsonParser().parse(json1); JsonArray array= json.getAsJsonArray(); Iterator iterator = array.iterator(); List<ContactDetail> details = new ArrayList<ContactDetail>(); while(iterator.hasNext()){ JsonElement json2 = (JsonElement)iterator.next(); Gson gson = new Gson(); ContactDetail contact = gson.fromJson(json2, ContactDetail.class); //can set some values in contact, if required details.add(contact); } 

Tengo otro formulario aquí

El valor de Json tiene un objeto como respuesta que contiene una matriz de enteros. Tienes que definir su clase correctamente primero:

 class ResponseHolder { private Integer[] response; } 

o

 class ResponseHolder { private int[] response; } 

o

 class ResponseHolder { private String[] response; } 

A continuación, utilice esa clase mientras analiza su valor json en una instancia de java:

 ResponseHolder responseHolder = gson.fromJson(answer, ResponseHolder.class); 

O usa org.json incluido en Android:

JSONObject jsonData = new JSONObject(answer);
JSONArray jsonItems = jsonData.getJSONArray("response");

  • cómo guardar datos de json en sqlite en android
  • Cómo enviar datos de formulario en retrofit2 android
  • Retrofit 2 + Rxjava error de manipulación
  • Obtener JSONArray sin nombre de matriz?
  • Android Visualización de datos de json a cardview en RecyclerView
  • Desarrollo de Android: Obtención de datos de WordPress
  • JSON publica en Rails desde Android
  • Análisis de JSON de la API de Google Maps en la aplicación para Android
  • NoMethodError en el objeto de ejecución estándar de Android
  • ¿Cómo enviar un objeto JSON sobre solicitud con Android?
  • Establecer el valor del campo oculto con los datos correspondientes del elemento seleccionado de AutoCompleteTextView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.