首页 > 解决方案 > 如何用新值更新 JSONArray?

问题描述

下面是从数据库(输入)中检索到的 JSON 对象。

{"Pickup Date End":["{\"date\":\"2020-12-30T14:15:00\",\"tzId\":\"Asia/Calcutta\",\"tzCode\":\"IST\"}","{\"date\":\"2020-12-31T14:15:00\",\"tzId\":\"Asia/Calcutta\",\"tzCode\":\"IST\"}"],
"Pickup Date Start":["{\"date\":\"2020-12-30T14:15:00\",\"tzId\":\"Asia/Calcutta\",\"tzCode\":\"IST\"}","{\"date\":\"2020-12-31T14:15:00\",\"tzId\":\"Asia/Calcutta\",\"tzCode\":\"IST\"}"]}

我做了一些必要的自定义(在Pickup Date End JSONObject 中)并尝试将更新的值放在同一个 JSONArray 中,如下所示(输出)

{"Pickup Date End":[{"date":"2020-12-30T02:45:00","tzId":"Asia/Calcutta","tzCode":"IST"},{"date":"2020-12-31T02:45:00","tzId":"Asia/Calcutta","tzCode":"IST"}],"Pickup Date Start":["{"date":"2020-12-30T02:45:00","tzId":"Asia/Calcutta","tzCode":"IST"},{"date":"2020-12-31T02:45:00","tzId":"Asia/Calcutta","tzCode":"IST"}"]}

但这会产生一个错误,这可能是由于更新的 JSONObject 中不存在 \。 有人可以建议如何在 Java 中为 JSONObjcet 应用转义即 \ 字符吗?

代码是

try {
      TimeZone siteTz = TimeZoneUtil.getSiteTimeZoneBySiteSysId(shipFromSiteId.longValue(), DvceContext.getInstanceAdminContext());
     if (changesObject != null) {
       JSONObject changes = (JSONObject) changesObject.get("Changes");
       if (changes.has("Pickup Date End")) {
         JSONArray valueArray = (JSONArray) changes.get("Pickup Date End");
         JSONObject oldJson = new JSONObject(valueArray.get(0).toString());
         JSONObject newJson = new JSONObject( valueArray.get(1).toString());
         
         Calendar oldCalendar = DateUtils.getFormattedDate((String) oldJson.get("date"), "yyyy-MM-dd'T'HH:mm:ss");
         Calendar newCalendar = DateUtils.getFormattedDate((String) newJson.get("date"), "yyyy-MM-dd'T'HH:mm:ss");             
         oldCalendar = TimeZoneUtil.convertTimeToTimeZone(oldCalendar, siteTz);
         newCalendar = TimeZoneUtil.convertTimeToTimeZone(newCalendar, siteTz);
         
         DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
         dateFormat.setTimeZone(siteTz);
         
         oldJson.put("date", dateFormat.format(oldCalendar.getTime()));
         newJson.put("date", dateFormat.format(newCalendar.getTime()));
         JSONArray newValuesArray = new JSONArray();
         newValuesArray.put(0, oldJson);
         newValuesArray.put(1, newJson);
         changes.put("Pickup Date End", newValuesArray);
         changesObject.put("Changes", changes);
         //row.setValue(changesColIndex, changesObject.toString());
       }
     }          
    }
    catch (Exception e) {
      // TODO either LOG the exception or re-throw, but not both
    }

标签: javajson

解决方案


能够解决这个问题,下面是解决方案。

newValuesArray.put(0, oldJson.toString());
newValuesArray.put(1, newJson.toString());

推荐阅读