코드스테이츠 BE 22일차 - StringfyJSON

coding infant·2022년 7월 22일

코드스테이츠BE

목록 보기
22/48

클래스 임포트가 안 될 때

그래듈 핸들링해서 버전 맞추는 것이 중요

메인 클래스가 임포트 되지 않아서 페어분이 알려주신 대로

import com.fasterxml.jackson.core.JsonProcessingException;

이 코드를 붙여넣으니 실행이 잘 됐다!

public class stringifyJSON {

  public String ObjectMapper(Object data) throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(data);
  }

  public String stringify(Object data) {                // Object -> String


    if (data instanceof String) {                       // 입력된 값이 문자열일 경우
      return "\"" + (String) data + "\"";               // 또는 return String.format("\%s\"", data); 

    } else if (data instanceof Integer) {               // 입력된 값이 Integer일 경우
      return Integer.toString((Integer) data);          // int 를 인식 못하니까 스트링으로 (Object->Interger->String) 
                                                        // 또는 return data.toString();


    } else if (data instanceof Boolean) {               // 입력된 값이 Boolean일 경우
      if ((Boolean) data) return "true";                // 또는 return String.valueOf(data);
      return "false";

    } else if (data instanceof Object[]) {              // 입력된 값이 Object[]일 경우
      Object[] array = (Object[]) data;
      if (array.length == 0) return "[]";               // 배열이니까 []가 필요
      String ans = "[";
      for (int i = 0; i < array.length - 1; i++) {
        ans += stringify(array[i]) + ",";               // 마지막이 아닐 때 ,를 추가해준다
      }
      return ans + stringify(array[array.length - 1]) + "]";
                                                        // 마지막일땐 문 닫고 나온다
/* 또는
      for(int i = 0; i<arr.length; i++) {
         arr[i] = stringify(arr[i]);
      }
      return Array.toString(arr).replaceAll(" ", "");
*/


    } else if (data instanceof HashMap) {               // 입력된 값이 HashMap일 경우
      HashMap<Object, Object> map = (HashMap) data;     // 이걸 재귀로 돌린다
      if (map.isEmpty()) return "{}";
      String ans = "{";
      int cnt = 0;
        
      Iterator<Object> keys = map.keySet().iterator();  // for문 사용도 가능

      while (keys.hasNext()) {
        cnt++;                                          // 값을 세준다
        Object key = keys.next();
        Object value = map.get(key);                    // getkey로 value값 가져오기
        ans += stringify(key) + ":" + stringify(value); // String
        if (cnt != map.size()) ans += ",";              // 마지막이 아닐 때 ,를 추가해준다       
        }
        return ans + "}";                               // 마지막일 땐 문 닫고 나온다

/* 또는
        HashMap<Object, Object> map = (HashMap<Object, Object>) data;
        HashMan<Object, Object> result = new LinkedHashMap<>();
        for(Map.Entry<Object, Object> entry : map.entrySet()) {  // 향상된 for문
           String key = stringify(entry.getkey());
           String value = stringfify(entry.getvalue());
           result.put(key, value);
        }
        return result.toString().replaceAll(" ", "").replaceAll("=", ":");                           
*/

      }
      return "null";                                    // 지정되지 않은 타입의 경우에는 "null"을 리턴
 }
}

0개의 댓글