10

こんにちは、私は Json が得意ではありません。ループを介してjsonオブジェクトをjson配列に追加しようとしていましたが、問題はループに入るたびに、配列内の以前のデータを新しいデータで上書きすることです。ここに私のコードがあります:

JSONObject jsonObj = new JSONObject();
JSONArray jsonArray = new JSONArray();
if(X.size() > 0)
{
  for (int j = 0; j < X.size(); j++)
   {
    zBean aBean = (zBean)X.get(j);
    jsonObj.put(ID,newInteger(aBean.getId()));
    jsonObj.put(NAME,aBean.getName());
    jsonArray.add(jsonObj);
   }
}

X.size = 2 の例:

when j=0
jsonObj => {"Name":"name1","Id":1000}
jsonArray => [{"Name":"name1","Id":1000}]

when j = 1
jsonObj => {"Name":"name2","Id":1001}
jsonArray => [{"Name":"name2","Id":1001},{"Name":"name2","Id":1001}]

私の例が十分に明確であることを願っています。

誰かがここで私を助けることができれば、私は感謝しています。

4

3 に答える 3

26

jsonObjループを繰り返すたびに、新しい参照を作成する必要があります。

for (int j = 0; j < X.size(); j++)
 {
  zBean aBean = (zBean)X.get(j);
  jsonObj = new JSONObject();
//^^^^^^^^^^^^^^^^^^^^^^^^^^^ add this line
  jsonObj.put(ID,newInteger(aBean.getId()));
  jsonObj.put(NAME,aBean.getName());
  jsonArray.add(jsonObj);
 }

それ以外の場合は、同じインスタンスを何度も更新し、同じオブジェクトへの参照を配列に何度も追加します。それらはすべて同じ参照であるため、それらの1つを変更すると、配列内のすべてに影響します。

于 2012-12-20T01:05:24.170 に答える