Language/Java

[Java] Map to Json String 변환(Convert) 방법

The Neo 2023. 3. 17. 13:43

Java에서 JSON을 파싱하는 방법을 보통 많이 하겠지만, Map을 JSON으로 변환해야 되는 때도 있습니다. 예를 들어, POST로 데이터를 전송해야 할 때 JSON으로 String 값을 변환해서 전송하게 되면, 쉽게 처리가 가능한 장점등이 있기 때문이죠.

 

그리고 Java에서 Map을 JSON으로 변환하는 방법 또한 많이 있습니다만, 대부분 라이브러리를 사용해서 변환을 하는 것이기 때문에 여기서는 대표적인 라이브러리를 하나 소개하고 변환을 시켜보도록 하겠습니다.

 

[Java] Map to Json String 변환(Convert) 방법


Jackson 라이브러리

만약 이 방식을 스프링부트(Spring boot)로 만든다면, Jackson 라이브러리는 별도로 설치하지 않아도 되는 경우가 많습니다. 하지만 라이브러리가 존재하지 않을 경우 아래와 같이 라이브러리를 추가하시면 됩니다.

 

pom.xml

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-core</artifactId>
        <version>2.9.8</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>
</dependencies>

 

위의 라이브러리를 설치하게 되면 메소드 하나를 실행하는 것만으로 Map 형태를 JSON String 값으로 변환할 수 있게 됩니다.

 

 

변환 방법

ObjectMapper objectMapper = new ObjectMapper();
String jsonStr = objectMapper.writeValueAsString(변환할맵);

 

Jackson 라이브러리가 제공하는 ObjectMapper 객체를 생성하고, writeValueAsString 메소드를 실행하면 Map을 JSON String으로 Convert 합니다. 아래는 좀 더 이해를 돕기 위한 예제입니다.

 

 

변환 예제

public String sendRequest(RequestGptGatewayDTO requestDTO) throws Exception {
    Map<String, Object> bodyMap = new HashMap<> ();
    bodyMap.put("max_tokens", requestDTO.getMax_tokens());
    bodyMap.put("top_p", requestDTO.getTop_p());
    bodyMap.put("temperature", requestDTO.getTemperature());

    List<Map<String, String>> messageList = new ArrayList<>();
    Map<String, String> messageMap = new HashMap<> ();
    messageMap.put("content", requestDTO.getPrompt_text());
    messageMap.put("role", "assistant");
    messageList.add(messageMap);
    bodyMap.put("messages", messageList);

    ObjectMapper objectMapper = new ObjectMapper();
    String jsonStr = objectMapper.writeValueAsString(bodyMap);
    logger.info(bodyMap.toString());
    logger.info(jsonStr);

    return restModule.sendPostData(gptGatewayUrl, jsonStr);
}

 

위 예제는 ChatGPT에 결과를 날리기 위해서 파라미터를 JSON String 구조로 변경을 하는 예시입니다. 그리고 위 예시를 실행하면, 아래와 같이 logger 결과가 찍힙니다.

 

{top_p=0.9, max_tokens=512, temperature=2.0, messages=[{role=assistant, content=동해물과 백두산이 마르고 닳도록}]} 
{"top_p":0.9,"max_tokens":512,"temperature":2.0,"messages":[{"role":"assistant","content":"동해물과 백두산이 마르고 닳도록"}]}

 

위 결과는 Map 형태를 toString으로 보여줬을 때의 모습이며, 아래의 결과는 Map을 JSON 형태로 변환하여 출력한 모습입니다. 

반응형