핵심 개념 및 동작 원리
Java 환경에서 JSON 데이터를 처리할 때 발생하는 중첩 구조 접근, 형변환 오류 등 문제를 해결하는 JSONMap의 설계 철학과 메커니즘을 분석합니다. 이 라이브러리는 기존 Jackson 라이브러리를 확장하여 Map 인터페이스를 강화합니다.
아키텍처 설계
JSONMap은 HashMap을 상속받아 기존 Jackson 변환 결과를 향상시킵니다. 주요 기능은 다음과 같습니다:
- 깊은 경로 접근: 점(.)과 대괄호([])를 이용한 중첩 데이터 탐색
- 계층적 구조 생성: set() 메서드로 자동 중간 노드 생성
- 유연한 형변환: getStr(), getInt() 등 타입 안전 메서드 제공
실전 적용 방법
<dependency>
<groupId>top.dlzio</groupId>
<artifactId>dlz-comm</artifactId>
<version>6.5.1</version>
</dependency>
기본 사용 패턴
// JSON 데이터 파싱
String jsonData = "{\"employee\":{\"details\":{\"positions\":[{\"department\":\"개발팀\"}]}}}";
JSONMap dataMap = new JSONMap(jsonData);
// 깊은 경로 접근
String dept = dataMap.getStr("employee.details.positions[0].department");
동적 구조 생성
JSONMap config = new JSONMap();
config.set("server.host", "127.0.0.1")
.set("server.ports", Arrays.asList(8080, 8081));
고급 활용 기법
형변환 처리
JSONMap values = new JSONMap("{\"count\":\"15\", \"active\":\"false\"}");
int count = values.getInt("count", 0); // 15
boolean isActive = values.getBool("active"); // false
빈 객체 변환
public class UserProfile {
@SetValue("contact.phone")
private String phoneNumber;
}
JSONMap userData = new JSONMap("{\"contact.phone\":\"010-1234-5678\"}");
UserProfile profile = userData.as(UserProfile.class);
성능 최적화 전략
- 반복적인 경로 접근 시 토큰 캐싱 활용
- 대량 데이터 처리 시 기존 Map 객체 재활용
- 필요한 필드만 선택적 추출
실용 사례
외부 API 응답 처리
JSONMap apiResponse = new JSONMap(externalResponse);
if (apiResponse.getInt("status.code") == 200) {
List<JSONMap> items = apiResponse.getList("payload.results", JSONMap.class);
}
구성 관리
JSONMap rules = new JSONMap(configJson);
double discount = rules.getDouble("promotion.rates.vip", 0.05);
주의사항
- 키 이름에 점(.) 포함 시 파싱 충돌 가능성
- 숫자 변환 시 getBigDecimal()로 정밀도 유지
- 스레드 간 공유 시 동기화 필수