Tengo problemas para encontrar una manera de analizar JSONArray. Se parece a esto:
[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]
Sé cómo analizarlo si el JSON se escribió de manera diferente (en otras palabras, si me devolvieron el objeto json en lugar de una matriz de objetos). Pero es todo lo que tengo y tengo que ir con eso.
* EDITAR: Es un json válido. Hice una aplicación para iPhone usando este json, ahora necesito hacerlo para Android y no puedo resolverlo. Hay muchos ejemplos, pero todos están relacionados con JSONObject. Necesito algo para JSONArray.
¿Alguien puede darme alguna pista, un tutorial o un ejemplo?
Muy apreciado !
Respuestas:
use el siguiente fragmento para analizar 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.
fuente
Solo daré un pequeño ejemplo de Jackson :
Primero cree un contenedor 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 analizar la lista de MyDataHolders
String jsonString = // your json ObjectMapper mapper = new ObjectMapper(); List<MyDataHolder> list = mapper.readValue(jsonString, new TypeReference<ArrayList<MyDataHolder>>() {});
Usar elementos de lista
String firstName = list.get(0).mName; String secondName = list.get(1).mName;
fuente
DefaultHttpClient
método de ejecución s es una llamada de bloqueo, por lo que debe realizarse en una tarea en segundo plano, solo para aclarar por qué está en una clase separada.import your_package_name_here.HttpGetTask.OnHttpGetCompletedListener;
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:
fuente
Crea una clase para contener los objetos.
public class Person{ private String name; private String url; //Get & Set methods for each field }
Luego deserialice de la siguiente manera:
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/
fuente
@Stebra Vea este ejemplo. Esto puede ayudarte.
public class CustomerInfo { @SerializedName("customerid") public String customerid; @SerializedName("picture") public String picture; @SerializedName("location") public String location; public CustomerInfo() {} }
Y cuando obtenga el resultado; analizar así
List<CustomerInfo> customers = null; customers = (List<CustomerInfo>)gson.fromJson(result, new TypeToken<List<CustomerInfo>>() {}.getType());
fuente
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: {"nombre": "nombre1", "url": "url1"}
Suponiendo que ha obtenido el resultado de una variable de cadena 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"); }
fuente
Ya se han mencionado algunas buenas sugerencias. Usar GSON es realmente útil, y para hacer la vida aún más fácil, puede probar este sitio web Se llama jsonschema2pojo y hace exactamente eso:
Le da su json y genera un objeto java que puede pegar en su proyecto. Puede seleccionar GSON para anotar sus variables, por lo que extraer el objeto de su json es aún más fácil.
fuente
Ejemplo de carga desde servidor en mi caso ...
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
fuente
Cree una clase de Java POJO para los objetos en la lista así:
class NameUrlClass{ private String name; private String url; //Constructor public NameUrlClass(String name,String url){ this.name = name; this.url = url; } }
Ahora simplemente cree una Lista de NameUrlClass e inicialícela en una ArrayList así:
List<NameUrlClass> obj = new ArrayList<NameUrlClass>;
Puede usar almacenar la matriz JSON en este objeto
obj = JSONArray;//[{"name":"name1","url":"url1"}{"name":"name2","url":"url2"},...]
fuente
obj = JSONArray;
se supone que debe hacer. ¿Qué hayJSONArray
en este contexto? ¿De dónde viene? ¿Cuál es el propósito de inicializarobj
con anew ArrayList<NameUrlClass>
, cuando lo reemplaza directamente después de todos modos?Publicación anterior, lo sé, pero a menos que haya entendido mal la pregunta, esto debería funcionar:
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]); }
}
fuente
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);
fuente