首页 > 解决方案 > For 循环两次而不是一次添加 JSON 响应

问题描述

实际上,我正在解析 JSON 并将 ts 数据存储在模型类中。但是特定数组的数据加了两次请帮帮我。我无法检测到我在哪里做错了编码。

我刚刚更新了我的代码,请检查并给我解决方案。问题是数组(数据)中的数据不符合预期。它将复制到其中的所有对象。

这是我的编码表:

这是我的模型课:

ConfigurableProductModel {

public String color_name;
public String color_id;
public ArrayList<Data> data;


public ArrayList<Data> getData() {
    return data;
}

public void setData(ArrayList<Data> data) {
    this.data = data;
}

public List<String> total_size;

public String getColor_name() {
    return color_name;
}

public void setColor_name(String color_name) {
    this.color_name = color_name;
}

public String getColor_id() {
    return color_id;
}

public void setColor_id(String color_id) {
    this.color_id = color_id;
}


public List<String> getTotal_size() {
    return total_size;
}

public void setTotal_size(List<String> total_size) {
    this.total_size = total_size;
}


public static class Data{


    public String pro_id;

    public String getPro_id() {
        return pro_id;
    }

    public void setPro_id(String pro_id) {
        this.pro_id = pro_id;
    }

    public String getPro_size() {
        return pro_size;
    }

    public void setPro_size(String pro_size) {
        this.pro_size = pro_size;
    }

    public String pro_size;


}
}

在这里我正在解析数据

   try {
                JSONArray jsonArray=new 
      JSONArray(response.toString());

                for(int i=0;i<jsonArray.length();i++)
                {

                    JSONObject jsonObject=jsonArray.getJSONObject(i);

                    ConfigurableProductModel configurableProductModel=new ConfigurableProductModel();

                    configurableProductModel.setColor_name(jsonObject.getString("name"));
                    configurableProductModel.setColor_id(jsonObject.getString("id"));




                       JSONArray jsonArray_data=jsonObject.getJSONArray("data");
                       sizes_list.clear();

                       for(int m=0;m<jsonArray_data.length();m++)
                      {

                       JSONObject jsonObject_data=jsonArray_data.getJSONObject(m);

                        ConfigurableProductModel.Data data=new ConfigurableProductModel.Data();
                        data.setPro_id(jsonObject_data.getString("entity_id"));
                        data.setPro_size(jsonObject_data.getString("size_label"));

                         sizes_list.add(jsonObject_data.getString("size_label"));

                         datasmodels.add(data);
                configurableProductModel.setData(data);

                      }


                    configurableProductModel.setTotal_size(sizes_list);
                    configurableProductModels.add(configurableProductModel);

                }

解析后:

[{
    "color_id": "20",
    "color_name": "Mountain",
    "data": [{
        "pro_id": "785",
        "pro_size": "169"
    }, {
        "pro_id": "786",
        "pro_size": "179"
    }, {
        "pro_id": "787",
        "pro_size": "189"
    }, {
        "pro_id": "782",
        "pro_size": "169"
    }, {
        "pro_id": "783",
        "pro_size": "179"
    }, {
        "pro_id": "784",
        "pro_size": "189"
    }],
    "total_size": ["169", "179", "189"]
}, {
    "color_id": "30",
    "color_name": "Sky Blue",
    "data": [{
        "pro_id": "785",
        "pro_size": "169"
    }, {
        "pro_id": "786",
        "pro_size": "179"
    }, {
        "pro_id": "787",
        "pro_size": "189"
    }, {
        "pro_id": "782",
        "pro_size": "169"
    }, {
        "pro_id": "783",
        "pro_size": "179"
    }, {
        "pro_id": "784",
        "pro_size": "189"
    }],
    "total_size": ["169", "179", "189"]
}]

标签: androidjson

解决方案


我对你的错误的猜测我会添加这个答案。

在您的代码中

datasmodels.add(data); 

上面的代码似乎是数据对象模型的数组列表。

那么你的代码应该是这样的

 for(int m=0;m<jsonArray_data.length();m++)
      {
        JSONObject jsonObject_data=jsonArray_data.getJSONObject(m);

        /* Declare your arraylist for data object here..! */
        ArrayList<Data> datasmodels = new ArrayList();

        ConfigurableProductModel.Data data=new ConfigurableProductModel.Data();
        data.setPro_id(jsonObject_data.getString("entity_id"));
        data.setPro_size(jsonObject_data.getString("size_label"));

        sizes_list.add(jsonObject_data.getString("size_label"));

        datasmodels.add(data);
        configurableProductModel.setData(datasmodels); //Changed Here

      }

您的问题是datamodels保留 previuos 数据,因此使其在 for 循环中声明将每次重新创建以加载新数据。


推荐阅读