【问题标题】:java.lang.NullPointerException JSONObject Array in JAVAJAVA 中的 java.lang.NullPointerException JSONObject 数组
【发布时间】:2018-04-23 11:23:16
【问题描述】:

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

【问题讨论】:

  • 您应该为 JSON 中的每个新对象重新初始化对象。在 for 循环中移动 JSONObject series = new JSONObject(); JSONArray $_time = new JSONArray(); JSONArray msrVal = new JSONArray(); JSONArray unitVal = new JSONArray(); JSONObject msr = new JSONObject();
  • 您确定问题的标题吗?空指针发生在哪里?
  • 很抱歉,你是对的,我弄错了问题的标题,当前真正的问题是描述中的重复输出

标签: java json


【解决方案1】:

您不会为每次迭代创建新的 JSON 对象。您只需在开始时创建一个,设置其值,然后将其添加到列表中。然后覆盖相同对象的值,并再次将其添加到列表中。最后,您已将对象添加到列表中 3 次,其值将是上次迭代的值。

要解决这个问题,请更改

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

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

【讨论】:

  • 非常感谢,我不敢相信解决方案这么简单。
猜你喜欢
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多