JSONObject.toString() 中的各个字段按顺序输入

使用org.json的类库,在一个JSONObject中逐个加入key & value,最后toString()输出时,发现key / value 的顺序是无序的。原因是其中的实现是用HashMap来存储key / value。

要使输出是有序的,可以用LinkedHashMap来替换HashMap。

修改org.json.JSONObject的构造函数,

public JSONObject() {
        this.map = new LinkedHashMap();  //new HashMap();
}

可能会对JSON 函数的执行效率有所影响。

private void saveTaskData(List<JSONObject> taskDataList,String taskStatus,HashMap<String, String> httpHeadersMap) throws Exception{ List<ShipTargetRecord> shipTargetRecords = new ArrayList<>(); List<ShipsInfo> shipsInfoList = new ArrayList<>(); Integer num = 0; for (JSONObject jsonResult : taskDataList) { /* todo 拿到data_id,根据data_id查询是否存在当前数据,存在,更新其他字段,不存在新增 针对 patchPath 更新 shipTargetRecord.setPatch_path(taskData.getString("patchPath")); */ JSONObject taskData = JSONObject.parseObject(jsonResult.toJSONString()); String dataId = taskData.getString("dataId"); String mode = taskData.getString("mode"); if(StringUtils.isEmpty(dataId) && StringUtils.isEmpty(mode)){ throw new Exception("参数错误"); } ShipTargetRecord shipTargetRecord = new ShipTargetRecord(); if("1".equals(mode)){ dataId = "MODE-01-"+dataId; ShipTargetRecord shipTarget = shipTargetRecordDao.queryByDataId(dataId); if(ObjectUtils.isEmpty(shipTarget)){ shipTargetRecord.setPatch_path(""); shipTargetRecord.setDataId(dataId); }else { shipTargetRecord.setPatch_path(shipTarget.getPatch_path()); shipTargetRecord.setDataId(dataId); shipTargetRecord.setMode(shipTarget.getMode()); shipTargetRecord.setId(shipTarget.getId()); num+=1; //webSocketServer.sendInfo(shipTarget.toString(),"ggqb_message"); } }else { dataId = "MODE-02-"+dataId; ShipTargetRecord shipTarget = shipTargetRecordDao.queryByDataId(dataId); if(ObjectUtils.isEmpty(shipTarget)){ shipTargetRecord.setPatch_path(""); shipTargetRecord.setDataId(dataId); }else { shipTargetRecord.setPatch_path(shipTarget.getPatch_path()); shipTargetRecord.setDataId(dataId); shipTargetRecord.setMode(shipTarget.getMode()); shipTargetRecord.setId(shipTarget.getId()); num+=1; //webSocketServer.sendInfo(shipTarget.toString(),"ggqb_message"); } } // shipTargetRecord.setId(Long.parseLong(taskData.getString("id"))); shipTargetRecord.setJsonFilePath(taskData.getString("jsonFilePath")); shipTargetRecord.setAutoMode(taskStatus); shipTargetRecord.setTaskId(httpHeadersMap.get("task-id")); shipTargetRecord.setSpanId(httpHeadersMap.get("span-id")); shipTargetRecord.setParentSpanId(httpHeadersMap.get("parent-span-id")); //shipTargetRecord.setScoutTaskId(taskData.getString("taskId")); shipTargetRecord.setScoutTaskId(httpHeadersMap.get("task-id")); shipTargetRecord.setQbId(taskData.getString("qbId")); //20250310 总体要求临时处理,xx改为JB String satelliteName = taskData.getString("satellite"); if("XX2002".equals(satelliteName)){ satelliteName = "JB20-2"; }else if("XX23".equals(satelliteName)){ satelliteName = "JB23"; }else { satelliteName = "JB20-1"; } shipTargetRecord.setSatelliteName(satelliteName); shipTargetRecord.setSrcImgName(taskData.getString("srcImgName")); /*shipTargetRecord.setPatch_path(taskData.getString("patchPath"));*/ shipTargetRecord.setScoutTime(taskData.getString("detectTime")); shipTargetRecord.setShipNum(taskData.getString("shipNum")); shipTargetRecord.setMode(taskData.getString("mode")); shipTargetRecord.setArchiveDate(DateUtils.getNowTime()); shipTargetRecords.add(shipTargetRecord); JSONArray shipsInfoArray = taskData.getJSONArray("shipsInfo"); for (Object o : shipsInfoArray) { JSONObject jsonObject = JSONObject.parseObject(o.toString()); ShipsInfo shipsInfo = new ShipsInfo(); shipsInfo.setShipId(jsonObject.getString("shipId")); shipsInfo.setMode(taskData.getString("mode")); shipsInfo.setScoutTime(taskData.getString("detectTime")); shipsInfo.setQbId(taskData.getString("qbId")); shipsInfo.setCenterPointInImage(jsonObject.getString("centerPointInImage")); shipsInfo.setCornerPointsInImage(jsonObject.getString("cornerPointsInImage")); shipsInfo.setPatchCornerPoints(jsonObject.getString("cornerPointsInWgs84")); String centerPointInWgs84 = jsonObject.getString("centerPointInWgs84"); String[] split = centerPointInWgs84.replace("[","").replace("]","").split(","); shipsInfo.setCenterLongitude(split[0]); shipsInfo.setCenterLatitude(split[1]); if("2".equals(mode)){ String patchCornerPoints = getPatchCornerPoints(split[0],split[1]); shipsInfo.setPatchCornerPoints(patchCornerPoints); } shipsInfo.setVelocity(jsonObject.getString("speed")); shipsInfo.setDirection(jsonObject.getString("direction")); shipsInfo.setName(jsonObject.getString("targetName")); shipsInfo.setTargetLevel(jsonObject.getString("targetLevel")); shipsInfo.setTargetType(jsonObject.getString("targetType")); shipsInfo.setTargetProp(jsonObject.getString("targetProp")); shipsInfo.setTargetLength(jsonObject.getString("targetLength")); shipsInfo.setTargetWidth(jsonObject.getString("targetWidth")); shipsInfo.setCredit(jsonObject.getString("conf")); shipsInfo.setTargetAngle(jsonObject.getString("targetAngle")); shipsInfo.setTargetId(jsonObject.getString("targetId")); shipsInfo.setSpeedError(jsonObject.getString("speedError")); shipsInfo.setSpeedDim(jsonObject.getString("speedDim")); shipsInfo.setDirectionError(jsonObject.getString("directionError")); shipsInfo.setErrorType(jsonObject.getString("errorType")); shipsInfo.setPosshipex(jsonObject.getString("precision")); if("0".equals(taskStatus)){ shipsInfo.setRemark("0");//自动 已判读 }else { shipsInfo.setRemark("1");//人工 未判读 } shipsInfo.setTaskId(httpHeadersMap.get("task-id")); shipsInfoList.add(shipsInfo); } } List<ShipsInfo> saveAll = shipsInfoDao.saveAll(shipsInfoList); log.info("任务数据中目标数据保存结果------>:{}",saveAll.size()); List<ShipTargetRecord> result = shipTargetRecordDao.saveAll(shipTargetRecords); log.info("******************************高轨数据接入完成*****************************",result.size()); //向业管上报状态 systemConfigService.ggpzToBms(httpHeadersMap); if(num>0){ webSocketServer.sendInfo(String.valueOf(num),"ggqb_message"); } } private void savePatchPathData(List<JSONObject> patchPathData) throws Exception{ for (JSONObject jsonObject : patchPathData){ String dataId = jsonObject.getString("dataId"); String mode = jsonObject.getString("mode"); if("1".equals(mode)){ dataId = "MODE-01-" + dataId; ShipTargetRecord shipTarget = shipTargetRecordDao.queryByDataId(dataId); if(ObjectUtils.isEmpty(shipTarget)){ ShipTargetRecord shipTargetRecord = new ShipTargetRecord(); shipTargetRecord.setPatch_path(jsonObject.getString("patchPath")); shipTargetRecord.setDataId(dataId); shipTargetRecordDao.saveAndFlush(shipTargetRecord); }else { shipTarget.setPatch_path(jsonObject.getString("patchPath")); shipTargetRecordDao.saveAndFlush(shipTarget); /*webSocketServer.sendInfo(shipTarget.toString(),"ggqb_message");*/ } }else { String patchPath = jsonObject.getString("patchPath"); //截取patchPath的路径 Path path = Paths.get(patchPath); String parentPath = path.getParent().toString(); //遍历patchPath,拿到当前目录下所有.tif结尾的文件 List<String> tifFiles = new ArrayList<>(); File dir = new File(parentPath); File[] files = dir.listFiles(); log.info(">>>>>上级目录下的所有文件:{}",files.toString()); for (File file : files) { if (file.isFile() && file.getName().endsWith(".tiff")) { tifFiles.add(file.getAbsolutePath()); } } log.info(">>>>>上级目录下的所有tiff:{}",tifFiles.toString()); for (String tifPath : tifFiles){ String tifName = tifPath.substring(tifPath.lastIndexOf("/") + 1,tifPath.lastIndexOf(".")); dataId = "MODE-02-" + tifName; ShipTargetRecord shipTarget = shipTargetRecordDao.queryByDataId(dataId); if(ObjectUtils.isEmpty(shipTarget)){ ShipTargetRecord shipTargetRecord = new ShipTargetRecord(); shipTargetRecord.setPatch_path(tifPath); shipTargetRecord.setDataId(dataId); shipTargetRecordDao.saveAndFlush(shipTargetRecord); }else { shipTarget.setPatch_path(tifPath); shipTargetRecordDao.saveAndFlush(shipTarget); } } } } } 这是我的两个方法,通过两个不同的接口调用,如果同时调用这两个接口,就会导致通过dataid都没匹配上,从而导致没有通过dataid合并数据,而是各插入了一条,如何解决
最新发布
07-22
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值