Json 열 정렬(json 열 정렬 및 대비를 위한 가젯과 함께 제공)

7722 단어
최근에 매우 성가신 문제에 부딪혔다.내가 지금 하고 있는 업무의 일부분은 이전의 앱 서버를net 인터페이스에서 자바 인터페이스를 번역합니다.그러나 몇몇 이전의 인터페이스에서 한 인터페이스가 십여 가지 일을 했고 되돌아오는 json열은 5, 6, 수백 줄에 달했다.확실하게 보면 머리가 커진다.그러나 되돌아오는 json열이 원래의 것과 맞지 않으면 app 클라이언트는 정상적으로 표시할 수 없고 인공적으로 비교하는 것은 시간 소모이다.그래서 저는 json열을 포맷한 다음에 필드 이름에 따라 순서를 정하고 한 줄씩 비교하면 인공보다 무수한 차이를 빨리 찾을 수 있는 프로그램을 찾고 싶습니다.한참을 찾았지만 마땅한 것을 발견할 수가 없었다.그래서 어쩔 수 없이 스스로 하나를 썼다.이 도구의 주요한 사고방식은 json열을 포맷하고 키 값에 따라 순서를 정하는 것이다. 이론적으로 같은 필드는 모두 같은 위치에 배열한 다음에 이것에 따라 한 줄 한 줄 비교하고 같지 않으면 빨간색으로 표시한다.똑같으면 변하지 않아요. 사용해 봤는데 효과가 괜찮아요. 그래서 꺼내서 나눠요. 다들 야근을 안 했으면 좋겠어요.하하
그중에 구덩이fastjson에 있는 필드의 정렬이 제 문제를 잘 해결하지 못하고 정렬에 문제가 있습니다.그래서 나는 스스로 방법을 써서 순서를 정했다.
 
    private Map sortField(Map map){
        //new      Map            
        Map treeMap = new TreeMap<>(new MapComparator());
        for (Map.Entry entry : map.entrySet()){
            Object value = entry.getValue();
            //        
            if (value == null || (value instanceof String && StringUtils.isBlank((String) value))){
                continue;
            }
            //      JSONObject       TreeMap
            if (value instanceof JSONObject){
                //JSONObject    toString         toString
                treeMap.put(entry.getKey(), sortField(JSON.parseObject(value.toString(), Map.class)));
                //      JSONArray
            }else if (value instanceof JSONArray){
                //        JSONArray      
                JSONArray jsonArray = (JSONArray) value;
                List list = new ArrayList<>(jsonArray.size());
                for (Object object : jsonArray){
                    //         JSONObject       TreeMap
                    if (object instanceof JSONObject){
                        object = sortField(JSON.parseObject(object.toString(), Map.class));
                    }
                    //           
                    list.add(object);
                }
                //list       
                list.sort(new ListComparator());
                treeMap.put(entry.getKey(), list);
            }else {
                //           
                treeMap.put(entry.getKey(), value);
            }
        }
        return treeMap;
    }
class MapComparator implements Comparator {
        @Override
        public int compare(String str1, String str2) {
            return str1.compareTo(str2);
        }
    }
    class ListComparator implements Comparator {
        @Override
        public int compare(Object o1, Object o2) {
            //             Map       map toString            key value        
            //   map.put("key":"value"); toString     {"key":"value"}
            String str1 = o1.toString();
            String str2 = o2.toString();
            //        
            Integer length1= str1.length();
            Integer length2 = str2.length();
            //      
            int i = length1.compareTo(length2);
            //               
            if (i == 0){
                return str1.compareTo(str2);
            }
            return i;
        }
    }

이 방법은 json 직렬로 바뀐 맵을 받아들인다.
Map treeMap = sortField(JSON.parseObject(json, Map.class));

이렇게 호출하면 된다.
다음은 이 작은 도구의github 주소입니다. 필요한 것이 있으면 내려와서 사용하십시오.주로 json 열을 정렬한 다음에 한 줄씩 비교합니다
https://github.com/RaidenXin/json-comparator
자바 환경이 설치된 기기에서 실행할 수 있는 자바 패키지 업그레이드 버전 0.0.3도 직접 다운로드할 수 있다
https://files.cnblogs.com/files/Raiden-xin/json_comparator_jar.zip
전재 가 있으면 출처 를 설명해 주십시오. 감사합니다

좋은 웹페이지 즐겨찾기