투케이2K

276. (kotlin/코틀린) [유틸 파일] jsonArrayKeySort : jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 (sort) 수행 본문

Kotlin

276. (kotlin/코틀린) [유틸 파일] jsonArrayKeySort : jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 (sort) 수행

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

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

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

            /**
             * // -----------------------------------------
             * [jsonArrayKeySort 메소드 설명]
             * // -----------------------------------------
             * 1. jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 수행
             * // -----------------------------------------
             * 2. 호출 방식 :
             *
             * var 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(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}]
             * // -----------------------------------------
             */


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


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

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


                    // [1]. [jsonArray >> List 변환 실시]
                    val copyList: MutableList<JSONObject> = ArrayList()
                    for (i in 0 until jsonArray.length()) {
                        copyList.add(jsonArray.getJSONObject(i)) // list 에 삽입 실시
                    }


                    // [2]. [Collections 을 사용해서 List 배열 데이터 정렬 실시]
                    Collections.sort(copyList, object : Comparator<JSONObject> {
                        override fun compare(a: JSONObject, b: JSONObject): Int {

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

                            try {

                                // TODO [value 기준 정렬]
                                value_A = a[key].toString() // [정렬하려는 key 지정]
                                value_B = b[key].toString() // [정렬하려는 key 지정]

                            } catch (e: JSONException) {
                                e.printStackTrace()
                            }

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

                        }
                    })


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


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


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

 

반응형
Comments