JSON을 Java 클래스로
JSON 샘플을 붙여넣으면 알맞은 필드 타입, getter, setter, JSON 라이브러리 애너테이션을 갖춘 하나 이상의 Java 클래스를 생성합니다. 더 깔끔한 코드를 위해 Jackson(@JsonProperty), Gson(@SerializedName), Lombok(@Data/@Builder)을 지원합니다. 중첩된 객체는 선택한 레이아웃에 따라 내부 클래스 또는 형제 클래스가 됩니다.
JSON을 Java로 변환하는 방법
-
1
JSON 붙여넣기
샘플 하나면 충분합니다. 여러 샘플을 사용하면 null 허용 여부를 더 정확하게 판별할 수 있습니다.
-
2
라이브러리 선택
Jackson(Spring에서 가장 일반적), Gson(Android 및 일부 레거시 프로젝트), 또는 애너테이션 없는 순수 POJO.
-
3
추가 옵션 선택
getter/setter 자동 생성, 빌더 패턴, equals/hashCode가 필요하면 Lombok을 사용하고, 필요 없으면 순수하게 둡니다.
-
4
중첩 방식 선택
같은 파일 안의 형제 클래스(Java 17 이상에서 public 클래스는 별도 파일이어야 합니다) 또는 중첩된 정적 클래스.
-
5
코드 복사
프로젝트에 그대로 붙여넣으세요. 클래스 이름은 JSON 키와 일치하며, 패키지는 설정한 값으로 지정됩니다.
출력 예시: Jackson + Lombok
입력:
{ "firstName": "Alice", "age": 30, "address": { "city": "Madrid" } }
출력:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JsonProperty("firstName")
private String firstName;
@JsonProperty("age")
private int age;
@JsonProperty("address")
private Address address;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Address {
@JsonProperty("city")
private String city;
}
타입 매핑
| JSON | Java 타입 |
|---|---|
| 문자열 | String |
| 정수(≤ Integer.MAX) | Integer / int |
| 큰 정수 | Long / BigInteger |
| 소수 | Double / BigDecimal |
| 불리언 | Boolean / boolean |
| ISO 날짜 | LocalDate(Jackson JSR-310) |
| ISO 날짜·시간 | Instant / OffsetDateTime |
| null(null이 아닌 형제 필드가 있는 경우) | 래퍼 타입(예: Integer) |
| 배열 | List<T> |
| 객체 | 중첩 클래스 |
래퍼 타입과 원시 타입 중 선택
- 원시 타입(
int,long,boolean), null 불가, 효율적이며 오토박싱이 없습니다. - 래퍼 타입(
Integer,Long,Boolean), null 가능. 필드가 JSON에서 없거나 null일 수 있으면 필요합니다.
생성기는 null이 될 수 있다고 판단한 필드에는 래퍼 타입을, 그 외에는 원시 타입을 기본으로 사용합니다.
Jackson과 Gson 비교
| 기능 | Jackson | Gson |
|---|---|---|
| Spring에서의 보편성 | 예(기본값) | 아니요(설정 필요) |
| 성능 | 더 빠름 | 더 느림 |
| JSR-310 날짜 지원 | 추가 모듈을 통해 | 추가 모듈을 통해 |
| 다형성 | @JsonTypeInfo |
RuntimeTypeAdapter |
| 후행 쉼표 허용 | 아니요(기본값) | 예 |
흔한 실수
- null 가능한 필드에 원시 타입 사용.
int는 null이 될 수 없어, JSON에"age": null이 있으면 Jackson이 예외를 던집니다.Integer를 사용하세요. - 날짜 모듈 누락.
Instant/LocalDate에는jackson-datatype-jsr310이 필요합니다. 이 모듈이 없으면 날짜가String이나 에포크 long 값으로 처리됩니다. - 관련 없는 클래스 간에 래퍼 타입 공유. 두 JSON 구조가 모두 중첩된
Address를 가지면 생성기는Address클래스를 두 개 만듭니다. 수동으로 이름을 바꾸거나 통합하세요. @JsonIgnoreProperties(ignoreUnknown = true)빠뜨림. 엄격 모드의 Jackson은 알 수 없는 속성에서 예외를 던집니다. 관대한 역직렬화를 위해 이 애너테이션을 추가(또는 전역 설정)하세요.
자주 묻는 질문
대부분의 경우 Jackson입니다. Spring의 기본값이고 더 빠르며 다형성 지원도 풍부합니다. Gson은 더 가볍고 Android에서 잘 알려져 있지만, 최근 Android 프로젝트는 Moshi나 kotlinx.serialization을 점점 더 많이 사용합니다.
Lombok은 많은 상용구 코드(getter, setter, equals, hashCode, builder)를 줄여줍니다. 널리 쓰이지만 빌드에 Lombok 애너테이션 프로세서가 필요합니다. 의존성 관리를 이유로 Lombok을 피하는 프로젝트라면 비활성화하세요.
관찰된 어떤 샘플에서든 null인 필드는 래퍼 타입(int 대신 Integer)이 되어 null을 담을 수 있습니다. 그러면 Jackson은 "age": null을 오류 없이 역직렬화합니다. 직렬화 시 null을 건너뛰려면 @JsonInclude(Include.NON_NULL)을 추가하세요.
예, “record”를 선택하면 출력합니다. record는 간결하고 불변이며 Jackson 2.12+에서 동작합니다. Spring Boot 3 프로젝트에서는 record와 Lombok 없는 생성을 결합하는 것이 현대적인 선택입니다.
관련 도구
ASCII 표 참조
NUL, LF, DEL 같은 제어 문자를 포함해 모든 문자에 대한 10진수, 16진수, 8진수, 2진수, HTML 숫자 문자 참조를 담은 0부터 127까지의 전체 ASCII 표.
HTML 문자 참조
HTML 엔티티의 검색 가능한 목록, 각 엔티티의 이름 및 숫자 코드, 그리고 특수 문자 및 기호에 대한 1클릭 복사 기능을 제공합니다.
키보드 단축키 참고표
macOS, Windows, Linux에서 VS Code, Chrome, GNU Readline을 쓰는 Bash의 문서화된 기본 단축키를 검색합니다.
보색 찾기
어떤 입력에 대해서도 보색을 찾습니다. HSL 반대 색, 분할 보색 쌍, 그리고 접근성 있는 조합 제안을 반환합니다.
색상 틴트 생성기
기준 색의 밝은 틴트를 생성합니다. 디자인 시스템 토큰, 배경, 호버 상태를 위한 3-20단계 스케일.
이메일 검증기
이메일 주소를 검증합니다. RFC 5322 구문 검사, 실시간 MX 레코드 조회, 그리고 로컬 파트, 도메인, 길이 정보를 제공합니다. 이메일은 전송되지 않습니다.
이 도구는 다른 언어로도 제공됩니다
- JSON till Java-klass [SV]
- JSON إلى فئة Java [AR]
- JSON sang lớp Java [VI]
- JSON vers classe Java [FR]
- JSON ke Kelas Java [ID]
- JSON naar Java-klasse [NL]
- JSON zu Java-Klasse [DE]
- JSON เป็นคลาส Java [TH]
- JSON na klasę Java [PL]
- JSON a Clase Java [ES]
- JSON para Classe Java [PT]
- JSON から Java クラスへ [JA]
- JSON to Java Class [EN]
- JSON in classe Java [IT]
- JSON в класс Java [RU]
- JSON'dan Java Sınıfına [TR]
- JSON 转 Java 类 [ZH]