我有一个名为childData的JSONObject,它包含每个项目的名称,数量和价格,并在JSONArray pa中添加。但是在每次迭代之后,childData的前一次迭代输出值将被替换为pa中当前迭代输出值的值。
代码:
JSONArray pa = new JSONArray();
JSONObject childData = new JSONObject();
for(int i=0; i<name.size();i++) {
childData.put("Name", name.get(i));
childData.put("Qty", qty.get(i));
childData.put("Amt", price.get(i));
pa.put(childData);
}
正在生成如下输出
childData= {"Name":"Shirt","Qty":"1","Amt":"300"}
pa= [{"Name":"Shirt","Qty":"1","Amt":"300"}]
child= {"Name":"Coat","Qty":"1","Amt":"210"}
pa= [{"Name":"Coat","Qty":"1","Amt":"210"},{"Name":"Coat","Qty":"1","Amt":"210"}]
答案 0 :(得分:1)
您需要在for循环中创建childData
的新实例。像这样:
JSONArray pa = new JSONArray();
for(int i=0; i<name.size();i++) {
JSONObject childData = new JSONObject();
childData.put("Name", name.get(i));
childData.put("Qty", qty.get(i));
childData.put("Amt", price.get(i));
pa.put(childData);
}
现在你正在这样做,有一个childData实例,它在你放入数组的所有元素之间共享。当您修改该实例时,它会被修改&#34;对于每个元素也是如此。因此,当需要对其进行序列化时,您会看到糟糕的结果。