Cómo analizar JSON Array (Not Json Object) en Android

Tengo problemas para encontrar una manera de analizar JSONArray. Se parece a esto:

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...] 

Sé cómo analizar si el JSON fue escrito de manera diferente (En otras palabras, si tuviera json objeto devuelto en lugar de una matriz de objetos). Pero es todo lo que tengo y tengo que ir con él.

* EDIT: Es un json válido. Hice una aplicación de iPhone usando este json, ahora tengo que hacerlo por Android y no puedo entenderlo. Hay muchos ejemplos por ahí, pero todos ellos están relacionados con JSONObject. Necesito algo para JSONArray.

¿Puede alguien por favor darme alguna pista, o un tutorial o un ejemplo?

Muy apreciado !

Utilice el siguiente fragmento para analizar el JsonArray.

 JSONArray jsonarray = new JSONArray(jsonStr); for (int i = 0; i < jsonarray.length(); i++) { JSONObject jsonobject = jsonarray.getJSONObject(i); String name = jsonobject.getString("name"); String url = jsonobject.getString("url"); } 

Espero eso ayude.

Voy a dar un pequeño ejemplo de Jackson :

Primero cree un titular de datos que tenga los campos de la cadena JSON

 // imports // ... @JsonIgnoreProperties(ignoreUnknown = true) public class MyDataHolder { @JsonProperty("name") public String mName; @JsonProperty("url") public String mUrl; } 

Y analiza la lista de MyDataHolders

 String jsonString = // your json ObjectMapper mapper = new ObjectMapper(); List<MyDataHolder> list = mapper.readValue(jsonString, new TypeReference<ArrayList<MyDataHolder>>() {}); 

Uso de elementos de la lista

 String firstName = list.get(0).mName; String secondName = list.get(1).mName; 
 public static void main(String[] args) throws JSONException { String str = "[{\"name\":\"name1\",\"url\":\"url1\"},{\"name\":\"name2\",\"url\":\"url2\"}]"; JSONArray jsonarray = new JSONArray(str); for(int i=0; i<jsonarray.length(); i++){ JSONObject obj = jsonarray.getJSONObject(i); String name = obj.getString("name"); String url = obj.getString("url"); System.out.println(name); System.out.println(url); } } 

Salida:

 name1 url1 name2 url2 

Cree una clase para contener los objetos.

 public class Person{ private String name; private String url; //Get & Set methods for each field } 

Luego deserialice como sigue:

 Gson gson = new Gson(); Person[] person = gson.fromJson(input, Person[].class); //input is your String 

Artículo de referencia: http://blog.patrickbaumann.com/2011/11/gson-array-deserialization/

En este ejemplo hay varios objetos dentro de una matriz json. Es decir,

Esta es la matriz json: [{"nombre": "nombre1", "url": "url1"}, {"nombre": "nombre2", "url": "url2"

Este es un objeto: {"name": "name1", "url": "url1"}

Suponiendo que usted tiene el resultado a una variable String llamada jSonResultString:

 JSONArray arr = new JSONArray(jSonResultString); //loop through each object for (int i=0; i<arr.length(); i++){ JSONObject jsonProductObject = arr.getJSONObject(i); String name = jsonProductObject.getString("name"); String url = jsonProductObject.getString("url"); } 

@Stebra Vea este ejemplo. Esto puede ayudarle.

 public class CustomerInfo { @SerializedName("customerid") public String customerid; @SerializedName("picture") public String picture; @SerializedName("location") public String location; public CustomerInfo() {} } 

Y cuando usted consigue el resultado; Analizar como este

 List<CustomerInfo> customers = null; customers = (List<CustomerInfo>)gson.fromJson(result, new TypeToken<List<CustomerInfo>>() {}.getType()); 

Algunas sugerencias grandes ya se mencionan. El uso de GSON es realmente útil en efecto, y para hacer la vida aún más fácil puede probar este sitio web Se llama jsonschema2pojo y hace exactamente eso:

Usted le da su json y genera un objeto java que puede pegar en su proyecto. Usted puede seleccionar GSON para anotar sus variables, por lo que extraer el objeto de su json se vuelve aún más fácil!

Mi ejemplo Load From Server Ejemplo.

 int jsonLength = Integer.parseInt(jsonObject.getString("number_of_messages")); if (jsonLength != 1) { for (int i = 0; i < jsonLength; i++) { JSONArray jsonArray = new JSONArray(jsonObject.getString("messages")); JSONObject resJson = (JSONObject) jsonArray.get(i); //addItem(resJson.getString("message"), resJson.getString("name"), resJson.getString("created_at")); } 

Espero que ayude

  URL url = new URL("your URL"); connection = (HttpURLConnection) url.openConnection(); connection.connect(); InputStream stream = connection.getInputStream(); BufferedReader reader; reader = new BufferedReader(new InputStreamReader(stream)); StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = reader.readLine()) != null) { buffer.append(line); } //setting the json string String finalJson = buffer.toString(); //this is your string get the pattern from buffer. JSONArray jsonarray = new JSONArray(finalJson); 

Antiguo post lo sé, pero a menos que haya malinterpretado la pregunta, esto debería hacer el truco:

 s = '[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"}]'; eval("array=" + s); for (var i = 0; i < array.length; i++) { for (var index in array[i]) { alert(array[i][index]); } 

}

  • ¿Puedo subir imágenes y texto usando UrlEncodedFormEntity para multipartes?
  • Cómo usar daga en un proyecto de biblioteca de Android
  • Android: Cómo utilizar grantUriPermission para poder crear y enviar un correo electrónico con un archivo adjunto de mapa de bits
  • Android: no se puede iniciar la intención de servicio: ¿no se encuentra?
  • OnFling y multitouch - múltiples punteros MotionEvent
  • Android: Temporizador de cuenta atrás, por ejemplo, de 10:00 a 00:00? Utilizando OnclickListener a TextView?
  • ¿Una manera fácil de dibujar una línea punteada recta en libgdx?
  • Compruebe la disponibilidad de la red wifi oculta
  • Convertir enum enumerado a Ennotación enumerada en android
  • ¿Dónde está jarsigner?
  • Android - ¿Cómo carga eficientemente una gran cantidad de texto en un TextView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.