根据一个属性,剔除 Json 中重复元素(删除 JSON 中重复的部分)

本文介绍了一种在将A系统中的用户信息同步到B系统过程中去除重复信息的方法。通过对比用户ID,筛选出每个用户的最高职位记录,确保数据的准确性和唯一性。

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 

[ {
  "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);
                }
            }这

这样循环后数据就没有重复的了,可以直接解析并作后续操作了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值