배움과 기록의 장
[Java] Stringifyjson 본문
2023.1.12 작성
🔸 JSON 개념 숙지
- JSON(JavaScript Object Notation) 이란?
데이터 교환을 위해 만들어진 객체 형태의 포맷
- JSON을 사용하는 이유
자바 언어를 이용하여 Map에 데이터를 저장한 후 이것을 다른 사용자에게 전송할 때, 상대 사용자도 자바 프로그램이어야 Map의 데이터를 읽을 수 있다. 하지만 모두가 같은 언어로 된 프로그램을 사용하지 않으니, 이런 경우에 데이터를 전송하r고 읽기 위해 만들어진 포맷이 JSON
- JSON 형태로 변경하는 방법
jackson라이브러리에서 제공하는 ObjectMapper클래스를 사용하여 JSON형태로 변환
Map<String, String> message = new HashMap<>(){{
put("받는사람", "coco");
put("보낸사람", "dede");
}};
// 전송할 때 JSON 타입으로 변환 -> 객체를 문자열로 직렬화(serialize)
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(message); //{"받는사람":"coco","보낸사람":"dede"}
// 받을 때 객체 형태로 변환 -> 문자열을 객체로 역직렬화(deserialize)
Map<String,String> data = mapper.readValue(json , Map.class);
🔸 writeValueAsString 메서드의 역할(data객체->JSON포맷)을 하는 stringify 함수를 구현하는 과제
- 자료형이 배열이나 해시맵일 경우에 요소마다 재귀함수 사용
- 풀면서 썼던 함수
Object data를 String으로 변환할 때
//String 일 경우
"\"" + data + "\"";
"\"" + (String) data + "\"";
"\"" + data.toString() + "\"";
"\"" +String.valueOf(data) + "\"";;
String.format("\"%s\"", data);
//Integer일 경우
data + ""; // 얘랑
data.toString(); //얘는 형변환을 맡기는 것이기 때문에 추천x, (toString()은 주소값이 나올 수도 있음)
String.valueOf(data);
String.format("%d", (Integer)data);
Integer.toString((Integer) data);
//Boolean일 경우
data + "";
data.toString();
String.valueOf(data);
String.format("%b", (Boolean)data);
//배열일 경우
Arrays.toString(arr);
//해시맵일 경우
hashmap.toString();
원하는 문자열로 조작할 때 (String 조작?)
//0. 스트링 합치기
str1 + str2;
//1. 공백 없애기
str.replaceAll(" ", "");
//2. 문자 교체하기
str.replaceAll("=", ":");
//3. 마지막 문자 없애기
str.substring(0,str.length()-1);
- 내가 짠 코드와 풀이 코드와의 차이
배열과 해시맵에서,
내가 짠 코드는 result 스트링을 만들고, 요소를 순회하며 재귀함수의 결과를 "," 나 ":" 와 함께 result에 계속 더해준 후,
"["+result+"]" 이나 "{"+result+"}" 로 최종 결과를 반환하였음
풀이 코드는 result스트링을 만들지 않고, 요소를 순회하며 재귀함수의 결과를 배열이나 해시맵에 넣어 준 후,
해당 배열.toString() 이나 해시맵.toString()을 통해 한번에 결과데이터를 문자열로 바꾸고,
.replaceAll(~,~)를 통해 문자열을 원하는 형태로 가공해줌 ex 공백을 없앤다거나,
- 그래서 풀이코드에서 쓰인 LinkedHashMap
해시맵/맵에 재귀함수의 결과를 넣어줄 때 순서가 뒤죽박죽이 되는 상황이 생김,
이때 들어오는 순서대로 저장해주는 순서가 있는 해시맵인 LinkedHashMap을 사용함
'backend > java' 카테고리의 다른 글
[Java] 예외 처리 (0) | 2025.04.09 |
---|---|
[Java] 제네릭 (0) | 2025.04.08 |
[Java] Enum (0) | 2025.03.23 |
[Java] 배열의 요소와 값, 배열과 주소값 (0) | 2023.01.12 |