2013-11-03 2 views
3

Что-то вроде this questionандроид прибудет массив JSON вложенном в массиве

Как сохранить в переменных?

Но с этим 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" 
      } 
     } 
    ] 
} 

Код:

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"); 
} 

Дело в том, что хранится: name[0] = "Hotel Raja"... name[1] = "Hotel Raja2" first[0] = Chinese, second[0] = Korean, first[1] = Chinese2, second[1] = Korean2

Я попробовал несколько сочетаний, но ничего не происходит, то, что мне нужно изменить в моем коде? благодаря

ответ

5

Вы можете использовать List вместо строки Array.

Лучше использовать концепцию модели.

Шаг: 1)

Создание модели для 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; 
    } 

} 

Шаг: 2) Создание модели для Cuisines

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; 
    } 
} 

Заключительный шаг: Теперь, как хранить данные в модели после Синтаксический

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(); 
     } 

Теперь, как получить значение из списка

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); 
     } 

Выход:

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

Надеюсь, это вам поможет.

+0

это работает для меня, после редактирования большого количества кода я достиг того, чего хочу, надеюсь, что это поможет другим в будущем и благодаря вам за вас время. – user2580401

+0

@ user2580401 Рад помочь вам. Всегда пожалуйста.. –

1

вы должны использовать ArrayList

, например

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); 
+0

но «первый» и «второй» значения, что две вложенные значения являются проблемой. – user2580401

1

Создать parcelable для ответа JSon см код ниже: -

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; 

     } 
    } 
Смежные вопросы