자율 학습/학습

[JAVA] String을 JSON으로 변환하고 따옴표 제거하기 - JSONParser, getAsString, replaceAll (+ HttpPost, HttpClient)

60cod 2022. 12. 29. 11:06

1. JSONParser()

 

 

JSON 파싱 개념

https://60cod.tistory.com/421

 

 

HTTP 요청으로 받은 응답값이 아래와 같다.

 

JSON 모양이지만 String으로 받았기 때문에 그냥 꺼낼 수 없다.

나는 errorCode 값과 errorMsg 값을 따로 뽑아서 디비 테이블에 넣어야 했다.

 

그래서 간단하게 JSONParser를 사용하였다. 

 

 

4가지 체크하기

1) String 형식의 JSON 문자열

2) JSONParser  → gson꺼 쓰기!! 중요!!

3) To Object

4) To JSONObject

 

 

HTTP 메소드 POST 방식 코드 예시

// HTTP메소드 : POST
try {
    HttpPost httpPost = new HttpPost("링크");
    // httpPost.setHeader, httpPost.setEntity 생략

    CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    CloseableHttpResponse response = httpClient.execute(httpPost);

    ResponseHandler<String> handler = new BasicResponseHandler();
    String body = handler.handleResponse(response);
    // {"errorCode":"S", "errorMsg":""}

    JsonParser jsonParser = new JsonParser();
    Object obj = jsonParser.parse(body);

    JsonObject jsonObject =(JsonObject) obj;

    String errorCode = String.valueOf(jsonObject.get("errorCode"));
    String errorMsg = String.valueOf(jsonObject.get("errorMsg"));

    리스트.setErrorCode(errorCode);
    리스트.setErrorMessage(errorMsg); // 디비에 insert 할 리스트

    if(response.getStatusLine().getStatusCode() == 200) {
        logger.info("성공");
    } else if(response.getStatusLine().getStatusCode() == 201) {
        logger.info("성공");
    } else {
        logger.info("실패");
    }
} catch (Exception e) {
    e.printStackTrace();
}

 

JSONParser 사용할 때 3가지 라이브러리가 뜨는데, 이 중 jdk.nashorn.internal.parser 꺼를 사용했더니 괄호 안에 인자를 담을 수 없어 빨간 줄이 생겼다.

(선언 라인에 생긴 빨간 줄은 롬복이 만든 거라서 에러가 아니다.)

그래서 만들고도 쓰지를 못하게 됨....

그러니 gson의 JSONParser를 쓰도록 하자!!!

 

 

JSON으로 만들어주고 값을 꺼낼 때, String 변수에 아래와 같이 담아준다.

String.valueOf(jsonObject.get("키"))

 

 


2. getAsString()

 

 

그런데

따옴표까지 같이 들어가버리는 문제가 발생했다....

 

 

getAsString() 메소드를 사용하면 큰따옴표 없이 값만 뽑아낼 수 있다.

그리고 String.valueOf도 안 달아줘도 된다!

 

String errorCode = jsonObject.get("errorCode").getAsString();
String errorMsg = jsonObject.get("errorMsg").getAsString();

 

cf. toString() 메소드는 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴을 다시 받기때문에 큰따옴표가 또 생기므로 똑같이 큰따옴표를 달고 나오게 된다.

 

 


3. replaceAll()

 

 

또는 replaceAll을 사용해서 큰따옴표만 찾아 없앨 수 있다.

 

앞에 다시 String.valueOf을 달아주고..

이때, 문자열은 큰따옴표로 감싸주기 때문에 문자열 내의 큰따옴표를 없애려면 앞에 역슬래시를 달아줘야 한다.

String errorCode = String.valueOf(jsonObject.get("errorCode")).replaceAll("\"", "");
String errorMsg = String.valueOf(jsonObject.get("errorMsg")).replaceAll("\"", "");

이렇게 다른 색으로 표시되는 걸 확인할 수 있다.

 

 

 

 

 

참고

https://koohee.tistory.com/10

https://tlatmsrud.tistory.com/38