투케이2K

529. (Android/Java) [jackson 라이브러리] - JSON 데이터에서 특정 key 값 전체 변경 수행 실시 본문

Android

529. (Android/Java) [jackson 라이브러리] - JSON 데이터에서 특정 key 값 전체 변경 수행 실시

투케이2K 2023. 4. 2. 18:14
반응형

[개발 환경 설정]

개발 툴 : AndroidStudio

 

[소스 코드]

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

            /**
             * -------------------------------------
             * TODO [요약 설명]
             * -------------------------------------
             * 1. Jackson : Java Object 를 JSON으로 변환하거나 JSON 을 Java Object 로 변환하는데 사용할 수 있는 Java 라이브러리입니다
             * -------------------------------------
             * 2. 필요 라이브러리 설치 :
             *
             * implementation 'com.fasterxml.jackson.core:jackson-core:2.13.4'
             * implementation 'com.fasterxml.jackson.core:jackson-annotations:2.13.4'
             * implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.4'
             * -------------------------------------
             * 3. 참고 사이트 :
             *
             * https://github.com/FasterXML/jackson
             *
             * https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
             * -------------------------------------
             * */


            // [샘플 JSON 선언 실시]
            String 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" +
                    "}";


            // [특정 key 값 변수 선언]
            String keyData = "Name";
            String valueData = "TWOK";


            // [JsonNode 선언 실시]
            JsonNode jsonNode = new ObjectMapper().readTree(json);


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


            // [특정 key 를 가지고 있는 path 확인]
            List<JsonNode> parents = jsonNode.findParents(keyData);


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


            // [for 문을 돌면서 각 path 특정 key 값 변경 실시]
            for (int i=0; i<parents.size(); i++){

                // [JSON 생성 실시]
                try {

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


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

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


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


            // [전체 로그 출력]
            S_Log.ltd("================================================");
            S_Log.cnt("["+ACTIVITY_NAME+" >> "+C_Util.getNowMethod(1)+" :: 전체 로그 출력 실시]");
            S_Log.cnt("-------------------------------------------");
            S_Log.cnt("[origin :: "+originString+"]");
            S_Log.cnt("-------------------------------------------");
            S_Log.cnt("[update :: "+updateString+"]");
            S_Log.lbd("================================================");

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

[결과 출력]

 

D///===========//: ================================================
I/: [A_Intro >> onCreate :: 전체 로그 출력 실시]
I/: -------------------------------------------
I/: [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"}]}}]
I/: -------------------------------------------
I/: [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"}]}}]
D///===========//: ================================================

 

반응형
Comments