[ {
"data" : {
"code" : "044",
"post" : "xxx领导",
"email" : "swfdffg@qq.com",
"Gender" : "boy"
},
"id" : "D279B324324343242342342428",
"userId" : "AF1111111111111111C93",
"status" : "GOOD"
}, {
"data" : {
"code" : "043",
"post" : "员工",
"email" : "jiangn@qq.com",
"Gender" : "girl"
},
"id" : "11914546565656757676D4D71D",
"userId" : "AF1111111111111111C93",
"status" : "BAD" ... ...
}]
如上有一个类似这样 json :JsonContext,主要是描述多个 user 的相关信息。
业务:把 A 系统中的用户信息同步到 B 系统中,当多条 user 信息的 userId 相同时视为同一个 user,同步时只取其中职位最高的那一条数据。
思路:在同步前就过滤掉同一个 user 职位低的数据信息。
方法:
JSONArray jsonArray = JSON.parseArray(JsonContext);
// 剔除JsonContext中重复的用户信息,只保留一个职位最高的user
Map userMap = new HashMap();
for (int i=0;i<jsonArray.size();i++) {
Object user = jsonArray.getJSONObject(i);
Map jsonMap = JSON.parseObject(String.valueOf(user));
Object userId = jsonMap.get("userId");
if (null != userMap.get(userId)) { // user已存在
Map oldUser = JSON.parseObject(String.valueOf(userMap.get(userId))); // 已存在用户
Map oldDataMap = JSON.parseObject(String.valueOf(oldUser.get("data")));
int oldLevel = getJobLevel(oldDataMap.get("post").toString());// 已存在用户职位等级
int level = getJobLevel(JSON.parseObject(String.valueOf(jsonMap.get("data"))).get("post").toString());// 当前用户职位等级
if(oldLevel <= level){ // 删除数值大者(职位等级低),保留等级高的职位
logger.info("\n-----------------------------------保留的是:"+userMap.get(userId));
logger.info("\n-----------------------------------删除的是:"+user);
jsonArray.remove(user);
i--;
}else {
logger.info("\n-----------------------------------删除的是:"+userMap.get(userId));
logger.info("\n-----------------------------------保留的是:"+user);
jsonArray.remove(jsonArray.getJSONObject(Integer.parseInt(userMap.get(userId+"i").toString())));
i--;
}
} else {
userMap.put(userId, user);
userMap.put(userId+"i", i);
}
}这
这样循环后数据就没有重复的了,可以直接解析并作后续操作了。