이번 포스트에서는 Java에서 JSON을 다루는 방법에 대해 정리해보고자 합니다.
간단하게 유틸화시켜 사용해보니 꽤나 편리합니다.
Object to JsonString
POJO를 JsonString으로 변환하는 방법입니다.
다양한 방법이 있지만 만약 아래처럼 field명과 jsonProperty가 달라야 한다면 ObjectMapper를 사용하는 것이 편리합니다.
따라서 저는 ObjectMapper를 사용하는 방법을 중심으로 설명하도록 하겠습니다.
public class SampleClass{
@JsonProperty("Test Custom Field")
private String testCustomField;
}
import com.fasterxml.jackson.databind.ObjectMapper;
public static String convertObjectToJsonString(Object o) {
ObjectMapper om = new ObjectMapper();
//Object에 비어있지 않은 값만 JSONString에 포함
om.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
String result = null;
try {
result = om.writeValueAsString(o);
} catch (JsonProcessingException e) {
System.out.println("Error");
}
return result;
}
JsonString to Object (특정 클래스로 변환)
앞서 변환한 JSONString을 특정 클래스로 되돌리는 함수입니다.
강제 캐스팅 없이 범용적으로 사용하기 위해 Generic으로 만들었습니다.
public static <T> T convertJsonStringToObject(String jsonString, Class<T> c) {
ObjectMapper om = new ObjectMapper();
T result = null;
try {
result = om.readValue(jsonStr, c);
} catch (JsonProcessingException e) {
System.out.println("Error");
}
return result;
}
Object to JSONObject
POJO를 JSONObject로 변환하는 방법입니다.
이때 JSONOBject의 import 경로에 주의해주세요.(simple json이 아닙니다.)
convertObjectToJsonString 함수는 앞서 구현한 Object To JsonString을 참고해주세요.
import org.json.JSONObject;
public static JSONObject convertObjectToJSONObject(Object obj) {
String stringifiedJSON = convertObjectToJsonString(obj);
JSONObject jsonObject = new JSONObject(stringifiedJSON);
return jsonObject;
}
2. Gson 사용
google에서 나온 Gson을 이용해서도 아래처럼 간단히 구현할 수 있지만, 앞서 설명한 것 처럼 커스턴 프로퍼티네이밍을 처리하기가 불편합니다.
//build.gradle.kts
implementation("com.google.code.gson:gson:2.10.1")
//Some.java
public static JSONObject convertObjectToJSONObject(Object obj) {
String gsonStringJson = new Gson().toJson(obj);
JSONObject jsonObject = new JSONObject(gsonStringJson);
return jsonObject;
}
JSONObject to Object(특정 클래스로 변환)
JSONObject를 원래 Object로 변환하는 방법입니다.
역시 강제 캐스팅 없이 범용적으로 사용하기 위해 Generic으로 만들었습니다.
참고로 JSONObject.toString 메소드를 이용하면 간단히 JSONString으로 변환할 수 있습니다.
public static <T> T convertJSONObjectToObject(JSONObject jsonObj, Class<T> c) {
return convertJsonStringToObject(jsonObj.toString(), c);
}
'java,springboot' 카테고리의 다른 글
Liveness vs Readiness 정의와 차이 (0) | 2024.05.07 |
---|---|
[성능개선]KMP알고리즘 활용하여 50% 성능개선 해보기 (1) | 2024.03.11 |
[Springboot] Reactive Redis 총 정리(config, generic, test) (1) | 2024.02.06 |
try-with-resources 사용법 및 주의점 (1) | 2023.12.05 |
브라우저에서 RTSP프로토콜 스트리밍 하기 (1) | 2023.10.30 |