투케이2K

250. (kotlin/코틀린) [유틸 파일] jsonKeyUpdate : json 특정 key 값 전체 변경 실시 본문

Kotlin

250. (kotlin/코틀린) [유틸 파일] jsonKeyUpdate : json 특정 key 값 전체 변경 실시

투케이2K 2023. 4. 2. 18:37

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

        // ----------------------------------------------------------------------------------
        // TODO [SEARCH FAST] : [RETURN] jsonKeyUpdate : json 특정 key 값 전체 변경 실시
        // ----------------------------------------------------------------------------------
        fun jsonKeyUpdate(data: String, keyData: String, valueData: String): String {

            /**
             * // -----------------------------------------
             * [jsonGetAllKeyList 메소드 설명]
             * // -----------------------------------------
             * 1. json 전체 key 값 출력 실시
             * // -----------------------------------------
             * 2. 호출 방식 :
             *
             * // [샘플 JSON 선언 실시]
             * val json = "{\n" +
             * "  \"Name\" : \"투케이\",\n" +
             * "  \"Age\" : 30,\n" +
             * "  \"BookList\" : [\n" +
             * "    {\"idx\" : 1, \"Name\" : \"JAVA\"},\n" +
             * "    {\"idx\" : 2, \"Name\" : \"Android\"},\n" +
             * "    {\"idx\" : 3, \"Name\" : \"Kotlin\"}\n" +
             * "  ],\n" +
             * "  \"Hobby\" : {\"Name\" : \"Coding\"},\n" +
             * "  \"Address\" : {\"Addr\" : [{\"Name\":\"yeoungju\"}, {\"Name\":\"seoul\"}]}\n" +
             * "}"
             *
             *
             * // [메소드 호출]
             * C_Util.jsonKeyUpdate(json, "Name", "TWOK")
             *
             * // -----------------------------------------
             * 3. 리턴 데이터 : JSON 전체 key 값
             *
             * [origin :: {"Name":"투케이","Age":30,"BookList":[{"idx":1,"Name":"JAVA"},{"idx":2,"Name":"Android"},{"idx":3,"Name":"Kotlin"}],"Hobby":{"Name":"Coding"},"Address":{"Addr":[{"Name":"yeoungju"},{"Name":"seoul"}]}}]
             *
             * [update :: {"Name":"TWOK","Age":30,"BookList":[{"idx":1,"Name":"TWOK"},{"idx":2,"Name":"TWOK"},{"idx":3,"Name":"TWOK"}],"Hobby":{"Name":"TWOK"},"Address":{"Addr":[{"Name":"TWOK"},{"Name":"TWOK"}]}}]
             * // -----------------------------------------
             * 4. 라이브러리 설치 : jackson
             * // -----------------------------------------
             */


            // [리턴 변수 선언]
            var returnData = ""
            var M_LOG = ""


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

                // [널 체크 수행 실시]
                if (stringNotNull(data) == true) {

                    // [JSON 형식으로 파싱 가능 한지 확인]
                    if (stringJsonObjectEnable(data) == true) {

                        // [JsonNode 선언 실시]
                        val jsonNode = ObjectMapper().readTree(data)


                        // [원본 전체 JSON 데이터 저장]
                        val originString = jsonNode.toString()


                        // [특정 key 를 가지고 있는 path 확인]
                        val parents = jsonNode.findParents(keyData)


                        // [실시간 update json 저장 값 변수 선언]
                        var updateString = originString


                        // [for 문을 돌면서 각 path 특정 key 값 변경 실시]
                        for (i in parents.indices) {

                            // [JSON 생성 실시]
                            try {

                                // [원본 해당 필드 문자열 저장]
                                val fieldData = parents[i].toString()
                                //S_Log.cnt("[origin value :: "+parents.get(i).path(keyData)+"]");


                                // [데이터 변경 실시]
                                val jsonObject = JSONObject(fieldData)
                                jsonObject.put(keyData, valueData)


                                // [json 문자열 update 수행]
                                updateString = updateString.replace(fieldData, jsonObject.toString())


                                // [로그 출력 실시]
                                /*
                                S_Log.ltd("================================================");
                                S_Log.cnt("["+ACTIVITY_NAME+" >> "+C_Util.getNowMethod(1)+" :: FOR 문 로그 출력 실시]");
                                S_Log.cnt("-------------------------------------------");
                                S_Log.cnt("[origin data :: "+fieldData+"]");
                                S_Log.cnt("-------------------------------------------");
                                S_Log.cnt("[change data :: "+jsonObject+"]");
                                S_Log.cnt("-------------------------------------------");
                                S_Log.cnt("[updateString :: "+updateString+"]");
                                S_Log.lbd("================================================");
                                // */

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

                        // [리턴 변수에 삽입]
                        M_LOG = "[SUCCESS] : JSON DATA UPDATE"
                        returnData = updateString
                    } else {
                        M_LOG = "[ERROR] : JSON TYPE ERROR"
                    }
                } else {
                    M_LOG = "[ERROR] : INPUT DATA IS NULL"
                }

            } catch (e: Exception) {
                e.printStackTrace()
                M_LOG = "[EXCEPTION] : " + e.message.toString()
            }


            // [로그 출력 실시]
            //*
            S_Log.ltd("================================================")
            S_Log.cnt("[" + ACTIVITY_NAME + " >> " + getNowMethod(1) + " :: json 특정 key 값 전체 변경 실시]")
            S_Log.cnt("-----------------------------------------")
            S_Log.cnt("[INPUT :: $data]")
            S_Log.cnt("-----------------------------------------")
            S_Log.cnt("[M_LOG :: $M_LOG]")
            S_Log.cnt("-----------------------------------------")
            S_Log.cnt("[RETURN :: $returnData]")
            S_Log.lbd("================================================")
            // */


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

[결과 출력]

 

D///===========//: ================================================
I/: [C_Util >> jsonKeyUpdate :: json 특정 key 값 전체 변경 실시]
I/: -----------------------------------------
I/: [INPUT :: {
      "Name" : "투케이",
      "Age" : 30,
      "BookList" : [
        {"idx" : 1, "Name" : "JAVA"},
        {"idx" : 2, "Name" : "Android"},
        {"idx" : 3, "Name" : "Kotlin"}
      ],
      "Hobby" : {"Name" : "Coding"},
      "Address" : {"Addr" : [{"Name":"yeoungju"}, {"Name":"seoul"}]}
    }]
I/: -----------------------------------------
I/: [M_LOG :: [SUCCESS] : JSON DATA UPDATE]
I/: -----------------------------------------
I/: [RETURN :: {"Name":"TWOK","Age":30,"BookList":[{"idx":1,"Name":"TWOK"},{"idx":2,"Name":"TWOK"},{"idx":3,"Name":"TWOK"}],"Hobby":{"Name":"TWOK"},"Address":{"Addr":[{"Name":"TWOK"},{"Name":"TWOK"}]}}]
D///===========//: ================================================

 

반응형
Comments