java.lang.NullPointerException JAVA中的JSONObject数组

时间:2018-04-23 11:23:16

标签: java json

我刚开始使用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"}
  ]

1 个答案:

答案 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);
}

这样,您可以为每个步骤创建一个新对象,并避免更改以前的步骤。