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 없는 생성을 결합하는 것이 현대적인 선택입니다.
관련 도구
보색 찾기
어떤 입력에 대해서도 보색을 찾습니다. HSL 반대 색, 분할 보색 쌍, 그리고 접근성 있는 조합 제안을 반환합니다.
Webpack 설정 생성기
순수 JavaScript, React, Vue용 webpack 5 webpack.config.js를 만드세요. TypeScript, Babel, CSS 또는 Sass, 이미지, HtmlWebpackPlugin, 개발 서버, npm install 명령까지 함께 제공합니다.
텍스트 파일 인코딩 변환기
깨진 문자를 고치기 위해 텍스트를 UTF-8, UTF-16, Latin-1, Windows-1252 등 여러 인코딩 사이에서 변환하세요.
HEX → ASCII 변환기
16진 바이트 시퀀스를 ASCII 텍스트로 변환합니다. 프로토콜 디버깅, 리버스 엔지니어링, CTF 챌린지에 좋습니다.
XML 포매터
일관된 들여쓰기로 XML 문서를 정렬 출력하고, 정확한 줄 번호로 적격성 오류를 잡아냅니다.
Protocol Buffers 디코더
hex, Base64, Base64URL, 텍스트 또는 파일의 Protobuf 와이어 형식 바이트를 브라우저에서 디코딩하고 정확한 필드 후보를 확인한 뒤 비공개 보고서로 내보냅니다.
이 도구는 다른 언어로도 제공됩니다
- JSON ke Kelas Java [ID]
- JSON vers classe Java [FR]
- JSON から Java クラスへ [JA]
- JSON para Classe Java [PT]
- JSON เป็นคลาส Java [TH]
- JSON a Clase Java [ES]
- JSON إلى فئة Java [AR]
- JSON sang lớp Java [VI]
- JSON zu Java-Klasse [DE]
- JSON naar Java-klasse [NL]
- JSON till Java-klass [SV]
- JSON na klasę Java [PL]
- JSON to Java Class [EN]
- JSON in classe Java [IT]
- JSON в класс Java [RU]
- JSON'dan Java Sınıfına [TR]
- JSON 转 Java 类 [ZH]