반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

배움과 기록의 장

[Java] Stringifyjson 본문

backend/java

[Java] Stringifyjson

chaeunii 2025. 4. 9. 14:45

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