android get json数组嵌套在数组中

时间:2013-11-03 01:16:37

标签: android json

this question

这样的东西

如何保存变量?

但是这个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

我尝试了几种组合,但没有任何反应,我需要在代码中修改什么?谢谢

3 个答案:

答案 0 :(得分:6)

您可以使用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)为美食创建模型

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

希望这会对你有所帮助。

答案 1 :(得分: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);

答案 2 :(得分:1)

为您的json响应创建一个parcelable,请参阅下面的代码: -

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;

        }
    }