GsonBuilder의 다양한 옵션으로 효율적인 JSON 처리하기
Gson 라이브러리는 JSON 데이터 처리에 있어 Java 개발자들에게 필수적인 도구 중 하나입니다. 특히, GsonBuilder는 Gson 객체 생성 시 다양한 옵션을 제공하여, 개발자가 원하는 방식으로 JSON 데이터를 처리할 수 있게 도와줍니다. 이번 글에서는 GsonBuilder의 주요 옵션들과 그 활용법에 대해 다뤄보겠습니다.
GsonBuilder란?
GsonBuilder는 Google의 Gson 라이브러리에서 제공하는 객체 생성 도구입니다. 기본적인 Gson 객체 생성 외에도, 다양한 설정 옵션을 통해 사용자가 원하는 형태와 기능으로 Gson 객체를 커스터마이징 할 수 있게 해줍니다. 이를 통해, JSON 데이터의 직렬화 및 역직렬화 과정에서 발생할 수 있는 다양한 상황에 대응하며, 효율적이고 안정적인 데이터 처리를 지원합니다.
Gson 객체 생성 방법
Gson 객체를 생성하는 방법은 크게 두 가지입니다.
1. Gson gson = new Gson();
2. Gson gson = new GsonBuilder().create();
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonUtil {
private static Gson gson1 = new Gson();
private static Gson gson2 = new GsonBuilder()
.disableHtmlEscaping()
.setPrettyPrinting()
.serializeNulls()
.create();
}
GsonBuilder를 활용하면, 날짜 형식 지정, 널 값 처리, 필드 명 변경 등의 다양한 옵션을 설정하여 Gson 객체를 생성할 수 있습니다. 이러한 옵션들은 실무에서 JSON 데이터 처리에 있어 다양한 요구 사항과 상황에 따라 유용하게 사용됩니다.
실무에서 자주 사용하는 GsonBuilder 옵션들과 활용법
new GsonBuilder().disableHtmlEscaping().create();
기본적으로 Gson은 < >와 같은 HTML 문자를 유니코드로 이스케이프 처리합니다. 그러나 'disableHtmlEscaping()' 옵션을 사용하면, GsonBuilder를 통해 생성된 Gson 객체가 HTML 문자를 그대로 전달할 수 있게 됩니다.
○ OPTION 적용 전
public class GsonUtil {
private static Gson gson = new GsonBuilder().create();
private static String getJsonData() {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("data", "Test Data < Aiden > 개발자 이야기.");
return gson.toJson(jsonObject);
}
public static void main(String[] args) {
System.out.println(getJsonData());
}
}
--- Result ------------------------------------------------------------
{"data":"Test Data \u003c Aiden \u003e 개발자 이야기."}
○ OPTION 적용 후
public class GsonUtil {
private static Gson gson = new GsonBuilder()
.disableHtmlEscaping()
.create();
private static String getJsonData() {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("data", "Test Data < Aiden > 개발자 이야기.");
return gson.toJson(jsonObject);
}
public static void main(String[] args) {
System.out.println(getJsonData());
}
}
--- Result ------------------------------------------------------------
{"data":"Test Data < Aiden > 개발자 이야기."}
new GsonBuilder().setPrettyPrinting().create();
'setPrettyPrinting()' 옵션은 별도의 기능을 추가하는 것이 아닌, 단순히 JSON 문자열을 가독성 좋게 출력하는 옵션입니다. 이 옵션을 사용하면 GsonBuilder를 통해 생성된 Gson 객체가 JSON 문자열을 들여쓰기와 개행을 적용하여 가독성을 높여주게 됩니다.
○ OPTION 적용 전
public class GsonUtil {
private static Gson gson = new GsonBuilder().create();
private static UserInfo getData(){
UserInfo userInfo = new UserInfo();
userInfo.setNo("5459");
userInfo.setName("Aiden");
List<String> roles = new ArrayList<>();
roles.add("Role_1");
roles.add("Role_2");
roles.add("Role_3");
userInfo.setRoles(roles);
return userInfo;
}
public static void main(String[] args) {
System.out.println(toJson(getData()));
}
}
--- Result ------------------------------------------------------
{"no":"5459","name":"Aiden","roles":["Role_1","Role_2","Role_3"]}
○ OPTION 적용 후
public class GsonUtil {
private static Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
private static UserInfo getData(){
UserInfo userInfo = new UserInfo();
userInfo.setNo("5459");
userInfo.setName("Aiden");
List<String> roles = new ArrayList<>();
roles.add("Role_1");
roles.add("Role_2");
roles.add("Role_3");
userInfo.setRoles(roles);
return userInfo;
}
public static void main(String[] args) {
System.out.println(toJson(getData()));
}
}
--- Result ----------------------------------
{
"no": "5459",
"name": "Aiden",
"roles": [
"Role_1",
"Role_2",
"Role_3"
]
}
new GsonBuilder().serializeNulls().create();
'serializeNulls()' 옵션은 Gson 객체가 직렬화 과정에서 null인 모든 필드를 포함하도록 설정하는 옵션입니다. 기본적으로 Gson은 null인 필드를 생략하므로, 이 옵션을 사용하면 null로 인해 필드가 누락되는 경우 발생할 수 있는 부작용을 예방할 수 있습니다. 따라서 이 옵션을 적용하는 것을 추천합니다.
○ OPTION 적용 전
public class GsonUtil {
private static Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
private static UserInfo getData(){
UserInfo userInfo = new UserInfo();
userInfo.setNo(null); // null.
userInfo.setName("Aiden");
List<String> roles = new ArrayList<>();
roles.add("Role_1");
userInfo.setRoles(roles);
return userInfo;
}
public static void main(String[] args) {
System.out.println(toJson(getData()));
}
}
--- Result ----------------------------------
{
"name": "Aiden",
"roles": [
"Role_1"
]
}
○ OPTION 적용 후
public class GsonUtil {
private static Gson gson = new GsonBuilder()
.setPrettyPrinting()
.serializeNulls()
.create();
private static UserInfo getData(){
UserInfo userInfo = new UserInfo();
userInfo.setNo(null); // null.
userInfo.setName("Aiden");
List<String> roles = new ArrayList<>();
roles.add("Role_1");
userInfo.setRoles(roles);
return userInfo;
}
public static void main(String[] args) {
System.out.println(toJson(getData()));
}
}
--- Result ----------------------------------
{
"no": null,
"name": "Aiden",
"roles": [
"Role_1"
]
}
그 외에도 GsonBuilder에 다양한 옵션들이 존재하지만, 실무에서는 위에서 소개한 옵션들이 가장 많이 사용됩니다. 이러한 옵션들을 활용하여 우리는 Gson을 이용한 JSON 처리를 보다 효율적이고 유연하게 수행할 수 있습니다. 각 프로젝트의 요구 사항에 맞게 옵션을 조합하여 사용하시길 바랍니다.
※ Gson 라이브러리 활용: Java와 JSON 간 데이터 변환 방법
'IT 개발 이야기 > Java' 카테고리의 다른 글
Java FTP 기본 사용법: 필수 FTP 명령어와 실무 적용 가이드 (0) | 2023.12.07 |
---|---|
Java로 구축하는 FTP 클라이언트: 파일 업로드 및 다운로드 최적화 (1) | 2023.12.07 |
Java 17로 업데이트: 금융권에서 고려해야 할 사항과 코드 수정 가이드 (0) | 2023.04.28 |
Java 설치 및 환경 변수 설정 가이드 (0) | 2023.04.14 |
Gson 라이브러리 활용: Java와 JSON 간 데이터 변환 방법 (0) | 2023.03.03 |
[Java] 자바 문자열 공백 제거 및 Null 체크 - JDK 버전 별 사용 예제 (0) | 2023.03.02 |
[Java] RSA 공개키 암호화/복호화 예시( RSA 비대칭키 암호화 ) (0) | 2023.02.23 |
[Java] AES-256 암호화 시 java.security.InvalidKeyException: Illegal key size 에러 원인 및 해결 방법 (0) | 2023.02.14 |
댓글