前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >根据一个属性,剔除 Json 中重复元素(删除 JSON 中重复的部分)

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

作者头像
微风-- 轻许--
发布2022-04-13 15:36:28
3.9K0
发布2022-04-13 15:36:28
举报
文章被收录于专栏:java 微风java 微风
代码语言:javascript
复制
[ {
  "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 职位低的数据信息。

方法:

代码语言:javascript
复制
  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);
                }
            }这

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/06/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档