투케이2K

554. (Android/Java) [유틸 파일] jsonArrayKeySort : jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 (sort) 수행 본문

Android

554. (Android/Java) [유틸 파일] jsonArrayKeySort : jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 (sort) 수행

투케이2K 2023. 4. 25. 21:45

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java

 

[소스 코드]

 

    // -----------------------------------------------------------------------------------------
    // TODO [SEARCH FAST] : [RETURN] jsonArrayKeySort : jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 수행
    // -----------------------------------------------------------------------------------------
    public static JSONArray jsonArrayKeySort (JSONArray jsonArray, String key) {

        /**
         * // -----------------------------------------
         * [jsonArrayKeySort 메소드 설명]
         * // -----------------------------------------
         * 1. jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 수행
         * // -----------------------------------------
         * 2. 호출 방식 :
         *
         * String sample = "[{\"key_1\":\"value_1\",\"step\":1},{\"key_3\":\"value_3\",\"step\":3},{\"key_10\":\"value_10\",\"step\":10},{\"key_2\":\"value_2\",\"step\":2}]";
         *
         * C_Util.jsonArrayKeySort(new JSONArray(sample), "step");
         *
         * // -----------------------------------------
         * 3. 리턴 데이터 : 특정 key 값 기준으로 정렬된 데이터
         *
         * [{"key_1":"value_1","step":1},{"key_2":"value_2","step":2},{"key_3":"value_3","step":3},{"key_10":"value_10","step":10}]
         * // -----------------------------------------
         * */


        // [리턴 데이터 선언 실시]
        JSONArray returnData = new JSONArray();


        // [로직 처리 수행 실시]
        try {

            // [사전 인풋 데이터 널 체크 실시]
            if (jsonArray != null && jsonArray.length() > 0
                    && jsonArray.toString().contains(key) == true){ // [널이 아니고, key 값을 포함하는 경우]

                // [1]. [jsonArray >> List 변환 실시]
                List<JSONObject> copyList = new ArrayList<JSONObject>();
                for (int i=0; i<jsonArray.length(); i++){
                    copyList.add(jsonArray.getJSONObject(i)); // list 에 삽입 실시
                }


                // [2]. [Collections 을 사용해서 List 배열 데이터 정렬 실시]
                Collections.sort( copyList , new Comparator<JSONObject>() {
                    @Override
                    public int compare(JSONObject a, JSONObject b) {

                        // TODO [value 변수 선언]
                        String value_A = "";
                        String value_B = "";

                        try {
                            // TODO [value 기준 정렬]
                            value_A = String.valueOf(a.get(key)); // [정렬하려는 key 지정]
                            value_B = String.valueOf(b.get(key)); // [정렬하려는 key 지정]
                        }
                        catch (JSONException e) {
                            e.printStackTrace();
                        }

                        // TODO [value 기준 정렬]
                        if (C_Util.stringIsNumber(value_A) == true && C_Util.stringIsNumber(value_B) == true){
                            return Integer.compare(Integer.parseInt(value_A), Integer.parseInt(value_B)); // [integer]
                        }
                        else {
                            return value_A.compareTo(value_B); // [string]
                        }
                    }
                });


                // [3]. [정렬된 List 를 다시 jsonArray 에 담기 실시]
                returnData = new JSONArray(copyList);
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }


        // [로그 출력]
        // ===============================================================
        S_Log._D_("jsonArrayKeySort :: jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 수행", new String[]{
                "INPUT [JSON] :: " + String.valueOf(jsonArray),
                "INPUT [KEY] :: " + String.valueOf(key),
                "RETURN :: " + String.valueOf(returnData)
        });
        // ===============================================================


        // [리턴 데이터 반환 실시]
        return returnData;
    }

 


 

반응형
Comments