JSON이란
JSON은 JavaScript Object Notation의 줄임말로 데이터 교환을 위해 만드렁진 객체형태의 포멧
다른 프로그램 사이에선 데이터를 교환하기 위해
수신자(reciever)와 발신자(sender)가 같은 프로그램을 사용한다.
또는, 문자열처럼 범용적으로 읽을 수 있어야 한다.
중 하나를 만족해야됨
재귀를 이용해 메서드 stringify를 직접 구현하기
목표
stringify 함수는 input 값을 JSON 형식으로 변환한다
stringify(true); // "true"
stringify("foo"); // "foo"
stringify(null) // "null"
HashMap<Object, Object> map = new HashMap<>();
map.put("null", 2);
map.put("true", "false");
stringify(map); // "{"null":2,"true":"false"}"
Map 자료형의 Key는 항상 String으로 저장됩니다. null은 입력할 수 없습니다.
예시에 해당되지 않는 자료형의 경우 모두 null을 반환합니다.
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(data);
위의 코드는 ObjectMapper 메소드로 이미 구현되어 있습니다. main 클래스에서 직접 사용해보세요!
코드
public String stringify(Object data) {
//입력된 값이 문자열일 경우
if(data instanceof String) {
return String.format("\"%s\"", data);
}
//입력된 값이 Integer일 경우
if(data instanceof Integer) {
return Integer.toString((Integer) data);
}
//입력된 값이 Boolean일 경우
if(data instanceof Boolean) {
return String.valueOf(data);
}
//입력된 값이 Object[]일 경우
if(data instanceof Object[]) {
Object[] arr = (Object[]) data;
for(int i = 0; i < arr.length; i++) {
arr[i] = stringify(arr[i]);
}
return Arrays.toString(arr).replaceAll(" ", "");
}
//입력된 값이 HashMap일 경우
if(data instanceof HashMap) {
HashMap<Object, Object> map = (HashMap<Object, Object>) data;
HashMap<Object, Object> result = new LinkedHashMap<>();
for (Map.Entry<Object, Object> entry : map.entrySet()) {
String key = stringify(entry.getKey());
String value = stringify(entry.getValue());
result.put(key, value);
}
return result.toString().replaceAll(" ", "").replaceAll("=", ":");
}
//지정되지 않은 타입의 경우에는 "null"을 리턴합니다.
return "null";
}