for循环中的JSON对象仅保留最后一条记录

时间:2017-04-26 08:18:27

标签: json for-loop

我有这段代码

JSONObject output = new JSONObject();
JSONObject elements = new JSONObject();
JSONArray jsonArrayOutput = new JSONArray(); 
ArrayList<String> name = ArrayList<String>();

for (int i=0 ; i<name.size() ; i++){

    elements.put("Name", name.get(i));
    jsonArrrayOutput.put(elements);
}


output.put("Results", jsonArrrayOutput).toString();

问题是结果输出Json只有&#34; name&#34;的最后一个元素。 arraylist很多次,不是所有的元素。 我该如何解决?

2 个答案:

答案 0 :(得分:0)

您在JSONObject output = new JSONObject(); JSONObject elements = new JSONObject(); JSONArray jsonArrayOutput = new JSONArray(); ArrayList<String> name = ArrayList<String>(); for (int i=0 ; i<name.size() ; i++){ JSONObject temp = new JSONObject(); temp.put("Name", name.get(i)); jsonArrrayOutput.put(temp); } output.put("Results", jsonArrrayOutput).toString(); 中再次添加相同名称键的元素 尝试为每次迭代创建一个新的JSONObject。 E.g:

dataChanged

答案 1 :(得分:0)

这是我的代码版本。代码的问题是elements对象的声明。每当您更改elements时,都会更改您添加到数组中的elementelement

这是因为当您将element对象放入jsonArrayOutput

时会使用引用
JSONObject output = new JSONObject();
JSONArray jsonArrayOutput = new JSONArray();
ArrayList<String> name = new ArrayList<>();

for (int i = 0; i < name.size(); i++) {
     JSONObject elements = new JSONObject();
     try {
          elements.put("Name", name.get(i));
          jsonArrayOutput.put(elements);
     } catch (JSONException e) {
          e.printStackTrace();
     }
}

try {
    output.put("Results", jsonArrayOutput).toString();
    Log.i("info",output.toString());
} catch (JSONException e) {
    e.printStackTrace();
}

希望有所帮助!