java - 如何用新值更新 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
}
解决方案
能够解决这个问题,下面是解决方案。
newValuesArray.put(0, oldJson.toString());
newValuesArray.put(1, newJson.toString());
推荐阅读
- spring-boot - Spring 安全错误循环视图路径 [index]:将再次分派回当前处理程序 URL [/index]。检查您的 ViewResolver 设置
- python - 使用 WSL 的 python virtualenv 中没有 lib64 目录
- go - 如何限制字符串标志中可接受的值范围?
- spring-data-jpa - Spring @TransactionalEventListener 的集中式错误处理程序
- reactjs - 如何在部署在 Google 云上的使用 npx 命令创建的反应应用程序中启用 https。需要使用从 Godaddy 购买的证书
- swift - 从某个点 Swift 开始视频
- javascript - 最简单的 Javascript Monad 实现
- python - 套接字代码 末尾的 Python 代码影响开头的代码
- javascript - 如果日期匹配,则将数组对象过滤到其他数组对象
- javascript - 同级对象的组数组