我刚开始使用java JSON库(org.json.simple.JSONObject)。 在我的代码中,我需要制作一个JSONOBJECTS的JSONARRAY, 但是,我找不到最后一个重复的对象,而不是在我的数组中找到3个不同的对象。
功能代码:
private void setMesurement(Date[] ts, Integer[][] time, String mesurementLabel, Object[][] mesurementValue, Integer[][] unit ) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.FRENCH);
JSONArray measurements = new JSONArray();
JSONObject series = new JSONObject();
JSONArray $_time = new JSONArray();
JSONArray msrVal = new JSONArray();
JSONArray unitVal = new JSONArray();
JSONObject msr = new JSONObject();
for (int i=0; i<ts.length; i++) {
$_time.clear();
msrVal.clear();
unitVal.clear();
for (int j=0; j<time[i].length; j++) {
$_time.add(time[i][j]);
msrVal.add(mesurementValue[i][j]);
unitVal.add(unit[i][j]);
}
series.put("$_time", $_time);
series.put(mesurementLabel, msrVal);
series.put("unit", unitVal);
msr.put("series", series);
msr.put("ts", dateFormat.format(ts[i]));
measurements.add(msr);
}
this.ppmp.put("measurements", measurements);
System.out.println("adding measurements: "+measurements+" to ppmp");
}
这是重复的结果:
"measurements":[
{"series":{
"heat":[7,8,9],
"unit":[2,2,2],
"$_time":[0,16,36]},
"ts":"2018-04-23T11:30:35.587+0100"},
{"series":{
"heat":[7,8,9],
"unit":[2,2,2],
"$_time":[0,16,36]},
"ts":"2018-04-23T11:30:35.587+0100"},
{"series":{
"heat":[7,8,9],
"unit":[2,2,2],
"$_time":[0,16,36]},
"ts":"2018-04-23T11:30:35.587+0100"}
]
答案 0 :(得分:1)
您不是为每次迭代创建新的JSON对象。您只需在开头创建一个,设置其值,然后将其添加到列表中。然后,您覆盖相同对象的值,再次将其添加到列表。最后,您已将对象添加到列表中三次,其值将是上次迭代中的值。
要解决此问题,请更改
JSONObject series = new JSONObject();
JSONArray $_time = new JSONArray();
JSONArray msrVal = new JSONArray();
JSONArray unitVal = new JSONArray();
JSONObject msr = new JSONObject();
for (int i=0; i<ts.length; i++) {
$_time.clear();
msrVal.clear();
unitVal.clear();
...
measurements.add(msr);
}
到
for (int i=0; i<ts.length; i++) {
JSONObject series = new JSONObject();
JSONArray $_time = new JSONArray();
JSONArray msrVal = new JSONArray();
JSONArray unitVal = new JSONArray();
JSONObject msr = new JSONObject();
...
measurements.add(msr);
}
这样,您可以为每个步骤创建一个新对象,并避免更改以前的步骤。