json string 중복 value 체크 후 중복 json 제거

2023. 9. 4. 10:03개발하는중/java

728x90
반응형

json data에 중복 value가 존재 할시 체크하여 json 데이터 제거 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    // Gson libray
 
    @Test
    public void jsonArrayTest() throws IOException {
        log.info("jsonArrayTest");
 
        String jsondata = "[{\"testId\":\"P111111\",\"name\":\"kim\"}, {\"testId\":\"P111111\",\"name\":\"lee\"}, {\"testId\":\"P233321\",\"name\":\"lee\"}]";
 
        JsonParser jsonParser = new JsonParser();
        JsonArray recvList = (JsonArray) jsonParser.parse(jsondata);
 
        ObjectMapper mapper = new ObjectMapper();
        List<Map<Object, Object>> list = Arrays.asList(mapper.readValue(jsondata, Map[].class));
 
        log.info("1 ::: " + recvList);
        log.info("2 ::: " + list);
 
        list = distinctArray(list, "testId");
 
        log.info("3 ::: " + list);
 
        String distinctData = list.toString();
 
        log.info("4 ::: " + distinctData);
 
        recvList = (JsonArray) jsonParser.parse(distinctData);
 
        log.info("5 ::: " + recvList);
 
    }
 
    // 중복제거 메소드, key 제거할 맵 key
    private List<Map<Object, Object>> distinctArray(List<Map<Object, Object>> target, Object key) {
        if(target != null){
            target = target.stream().filter(distinctToKey(o -> o.get(key))).collect(Collectors.toList());
        }
 
        return target;
    }
 
    // 중복제거 함수
    private <T> Predicate<T> distinctToKey(Function<super T, Object> keyExtractor){
        Map<Object, Boolean> seen = new ConcurrentHashMap<>();
        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
    }
cs
728x90