Android obtener json matriz anidados en el array

Algo como esta pregunta

¿Cómo guardar en variables?

Pero con este código json:

{ "restarutant": [ { "name": "Hotel Raja", "photo": "http:\/\/i.imgur.com\/Mzt4u.jpg", "address": "93, 2ndc ross, GDP etx.", "area": "Vylaikaval", "city": "Bangalore", "rating": "4", "cuisines": { "first": "Chinese", "second": "Korean" } }, { "name": "Hotel Raja2", "photo": "http:\/\/i.imgur2.com\/Mzt4u.jpg", "address": "93, 2ndc ross, GDP etx. number2", "area": "Vylaikaval2", "city": "Bangalore2", "rating": "4", "cuisines": { "first": "Chinese2", "second": "Korean2" } } ] } 

Código:

 JSONObject json = new JSONObject(thepreviousjson); JSONArray jArray = json.getJSONArray("restaurant"); String name[] = new String[jArray.length()]; String photo[] = new String[jArray.length()]; String address[] = new String[jArray.length()]; String area[] = new String[jArray.length()]; String city[] = new String[jArray.length()]; String rating[] = new String[jArray.length()]; String cuisines[] = new String[jArray.length()]; String first[] = new String[jArray.length()]; String second[] = new String[jArray.length()]; for(int i=0; i<jArray.length(); i++){ JSONObject json_data = jArray.getJSONObject(i); name[i] = json_data.getString("name"); photo[i] = json_data.getString("photo"); address[i] = json_data.getString("address"); area[i] = json_data.getString("area"); city[i] = json_data.getString("city"); rating[i] = json_data.getString("rating"); } 

El punto es haber almacenado: name[0] = "Hotel Raja"... name[1] = "Hotel Raja2" first[0] = Chinese, second[0] = Korean, first[1] = Chinese2, second[1] = Korean2

He intentado varias combinaciones, pero no pasa nada, ¿qué debo modificar en mi código? Gracias

Puede utilizar List lugar de String Array .

Mejor utilizar el concepto modelo.

Paso 1)

Crear un modelo para Restarutant.java

 public class Restarutant { private String name; private String photoUrl; private String address; private String area; private String city; private int rating; private Cuisines cuisines; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhotoUrl() { return photoUrl; } public void setPhotoUrl(String photoUrl) { this.photoUrl = photoUrl; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public int getRating() { return rating; } public void setRating(int rating) { this.rating = rating; } public Cuisines getCuisines() { return cuisines; } public void setCuisines(Cuisines cuisines) { this.cuisines = cuisines; } } 

Paso: 2) Crear Modelo para Cocinas

 public class Cuisines { private String first; private String second; public String getFirst() { return first; } public void setFirst(String first) { this.first = first; } public String getSecond() { return second; } public void setSecond(String second) { this.second = second; } } 

Paso final: Ahora cómo almacenar los datos en el modelo después del análisis

 List<Restarutant> list = new ArrayList<Restarutant>(); try { JSONObject json = new JSONObject(thepreviousjson); JSONArray jArray = json.getJSONArray("restaurant"); for (int i = 0; i < jArray.length(); i++) { JSONObject json_data = jArray.getJSONObject(i); Restarutant data = new Restarutant();// Create Object Here data.setName(json_data.getString("name")); data.setPhotoUrl(json_data.getString("photo")); data.setAddress(json_data.getString("address")); data.setArea(json_data.getString("area")); data.setCity(json_data.getString("city")); JSONObject cuisines = json_data.getJSONObject("cuisines"); Cuisines cuisine = new Cuisines();// Create Object here cuisine.setFirst(cuisines.getString("first")); cuisine.setSecond(cuisines.getString("second")); data.setCuisines(cuisine);// setting the cuisine list.add(data);// Finally adding the model to List } } catch (JSONException e) { e.printStackTrace(); } 

Ahora cómo recuperar el valor de la lista

 for(int i=0;i<list.size();i++){ Restarutant restarutant=list.get(i); String name=restarutant.getName(); String first=restarutant.getCuisines().getFirst(); String second=restarutant.getCuisines().getSecond(); System.out.println("Name: "+name+"First "+first+"Second "+second); } 

Salida:

 Name:Hotel Raja First:Chiense Second: Korean Name:Hotel Raja2 First:Chiense2 Second: Korean2 

Espero que esto te ayudará.

usted tiene que usar ArrayList

por ejemplo

 List<String> name = new ArrayList<String>(); for(int i=0; i<jArray.length(); i++){ JSONObject json_data = jArray.getJSONObject(i); //by add new value to List the key will be the same key inside JSONarray name.add(json_data.getString("name")); } //and to call back value from List name //get first element 0 String first_name = name.get(0); 

Cree un parcelable para su respuesta de json, vea el código abajo: –

 public class ObjectModel implements Parcelable{ public String name; public String photo; public String address; public String area; public String city; public String rating; public HashMap<String,Object> cuisines; public ObjectModel(Parcel in) { name = in.readString(); photo = in.readString(); address = in.readString(); area = in.readString(); city = in.readString(); rating = in.readString(); in.readMap(cuisines, Object.class.getClassLoader()); } @SuppressWarnings("rawtypes") public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ObjectModel createFromParcel(Parcel source) { return new ObjectModel(source); } @Override public ObjectModel[] newArray(int size) { return new ObjectModel[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeString(photo); dest.writeString(address); dest.writeString(area); dest.writeString(city); dest.writeString(rating); dest.writeMap(cuisines); } public ObjectModel() { } } //Write the parser private void parseJson(JSONObject baseJson) throws Exception { JSONArray jsonObjArray = baseJson.getJSONArray("restaurant"); ObjectModel[] objectModelArray = new ObjectModel[jsonObjArray.length()]; for(int index = 0;index<jsonObjArray.length();index++) { ObjectModel obj = new ObjectModel(); HashMap<String,Object> data = new HashMap<String, Object>(); JSONObject json = jsonObjArray.getJSONObject(index); obj.name = json.getString("name"); obj.photo = json.getString("photo"); obj.address = json.getString("address"); obj.area = json.getString("area"); obj.city = json.getString("city"); obj.rating = json.getString("rating");// if it is a string JSONObject cuis = json.getJSONObject("cuisines"); data.put("first", cuis.getString("first")); data.put("second", cuis.getString("second")); obj.cuisines = data; objectModelArray[index] = obj; } } 
  • Creación de un menú desplegable desde un archivo .json
  • Cómo anidar objetos al crear JSON con JSONObject
  • Finalización de la construcción de objetos después de la deserialización de GSON
  • MultipartEntity y Json
  • Cómo almacenar datos de JSON analizados en SQLite
  • Android no procesar objeto JSON
  • Imagen local a través de json local en android
  • Android: Json cadena con espacios da "objeto no terminado en" excepción
  • ¿Cómo obtener la ubicación actual de este código de mapa? También intento recibir datos del vehículo del servidor cuando estoy abierto el mapa
  • Parse ~ 1 MB JSON en Android muy lento
  • Cómo convertir json objeto en cadena en android ..?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.