본문 바로가기
Java & Spring

JSON 형태의 문자열(Json String)을 Map<String, Object> 형태로 변경해주는 함수

by 모닝위즈 2023. 9. 14.
반응형

네이버 로그인 같은 api 형태를 사용할 때 반환되는 값은 Json String 형식이다.

RestTemplate를 사용하면 만사 OK라서 해당 내용은 필요가 없다. 

특정 환경상 RestTemplate가 힘든 경우 ..

 

1. Gson 활용 (재귀 필요없음)

import com.google.gson.*;
import java.util.Map;

public class MainClass {

    /**
     *  Json 형태의 String 값을 Map으로 변환하는 함수 : Gson은 Long이 아니라 double로 변경해서 문제가 생긴다.
     * */
    private Map<String, Object> jsonStringToMap(String jsonString){
        Gson gson = new GsonBuilder()
                .setLongSerializationPolicy(LongSerializationPolicy.STRING)
                .create();
        Map map = gson.fromJson(jsonString, Map.class);
        //System.err.println(map);
        return map;
    }
    
}

 

2. json simple 활용 (필요 시 재귀 필요함)

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.util.HashMap;
import java.util.Map;

public class MainClass {


    /**
     * Json 형태의 String 값을 Map으로 변환하는 함수
     */
    private Map<String, Object> jsonStringToMap(String jsonString) throws Exception {
        Map<String, Object> map = new HashMap<>();
        try {
            JSONParser parser = new JSONParser();
            JSONObject jsonObject = (JSONObject) parser.parse(jsonString);
            for (Object key : jsonObject.keySet()) {
                String keyStr = (String) key;
                Object value = jsonObject.get(keyStr);
                map.put(keyStr, value);
            }
        } catch (Exception e) {
            System.err.println(e);
        }
        //System.err.println(map);
        return map;
    }

}

 

위 함수를 활용하면 간편하게 문자열 형태의 json 값을 Map으로 반환할 수 있다.

 

 

 

댓글