JSON → Java POJO
JSON에서 Java POJO 클래스를 즉시 생성. Jackson, Gson, Lombok 어노테이션 지원. 중첩 객체, 배열, 커스텀 루트 클래스명 처리. 무료, 브라우저 완결.
- 브라우저에서 처리
- 데이터가 브라우저 밖으로 나가지 않습니다
- 무료 · 회원가입 불필요
WeChat으로 스캔하여 공유
예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.
타입 매핑
null→Object- 문자열 →
String - 정수 →
int(int 범위를 넘는 값은long) - 부동소수점 →
double - 불리언 →
boolean - 배열 →
List<T> - 중첩 객체 → 독립된
public class
예시
다음 JSON 입력 시:
{"user": {"first_name": "Alice", "age": 30}, "tags": ["admin"]}
Lombok 모드로 생성되는 출력:
import java.util.List;
import lombok.Data;
@Data
public class RootObject {
private User user;
private List<String> tags;
}
@Data
public class User {
private String firstName;
private int age;
}
예시: 중첩 항목이 있는 주문 (Jackson 모드)
입력:
{"order_id": 9007, "customer": {"name": "Alice", "vip": true}, "items": [{"sku": "A-1", "qty": 2, "price": 9.5}, {"sku": "B-2", "qty": 1, "price": 20}], "note": null}
출력(getter / setter 생략):
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
public class RootObject {
@JsonProperty("order_id")
private int orderId;
private Customer customer;
private List<ItemsItem> items;
private Object note;
// getters and setters omitted here
}
public class Customer {
private String name;
private boolean vip;
// ...
}
public class ItemsItem {
private String sku;
private int qty;
private double price;
// ...
}
이 출력은 한 파일로는 컴파일되지 않습니다. public class는 같은 이름의 파일에 있어야 하므로 RootObject.java, Customer.java, ItemsItem.java로 나눕니다. 나누면 「주석 없음」 모드 출력은 javac 21로 그대로 컴파일됩니다.
생성 후 확인할 것
price는double입니다. 첫 항목은9.5, 둘째는20이고 도구는int와double을 더 넓은double로 합칩니다. 금액이면BigDecimal로 바꾸세요.- 샘플의
null은Object가 됩니다. 실제 타입으로 바꾸세요. - int 범위를 넘는 정수(밀리초 타임스탬프
1730000000000등)는long이 됩니다. 샘플 값은 작아도 나중에 커질 ID는 직접long으로 바꾸세요. - Lombok 모드는
@JsonProperty를 붙이지 않아서order_id가orderId에 매핑되지 않습니다:
import java.util.List;
import lombok.Data;
@Data
public class RootObject {
private int orderId;
private Customer customer;
private List<ItemsItem> items;
private Object note;
}
Lombok 모드에서는 @JsonProperty를 직접 붙이거나 Jackson에 PropertyNamingStrategies.SNAKE_CASE를 설정하세요. Gson 모드는 같은 목적으로 @SerializedName을 씁니다.
Jackson으로 읽기:
ObjectMapper mapper = new ObjectMapper();
RootObject order = mapper.readValue(json, RootObject.class);
Java 16 이상에서는 작은 불변 모델을 클래스 대신 record로 만들 수 있고, Jackson은 2.12부터 record를 읽습니다:
public record Customer(String name, boolean vip) {}
예시: 같은 키의 다른 구조와 Java 이름이 될 수 없는 키 (Jackson 모드)
{"billing": {"address": {"city": "Paris"}}, "shipping": {"address": {"line1": "1 Main St"}}, "class": "A", "2fa": true, "URL": "https://example.com"}
출력(getter / setter 대부분 생략):
import com.fasterxml.jackson.annotation.JsonProperty;
public class RootObject {
private Billing billing;
private Shipping shipping;
@JsonProperty("class")
private String classValue;
@JsonProperty("2fa")
private boolean t2fa;
@JsonProperty("URL")
private String uRL;
@JsonProperty("URL")
public String getURL() {
// 나머지 getter / setter 생략
}
public class Address {
private String city;
// ...
}
public class ShippingAddress {
private String line1;
// ...
}
- 두
address는 필드가 달라서 두 번째에 부모 이름을 앞에 붙입니다(ShippingAddress). 필드와 타입이 같은 객체는 클래스 하나를 함께 씁니다. 앞에 붙여도 이름이 겹치면 번호를 붙입니다. - Java 키워드와 리터럴에는
Value를 붙이고(class→classValue), 숫자로 시작할 이름에는T를 붙이고(2fa→t2fa), 같은 이름이 되는 키에는 번호를 붙입니다(first-name과first_name→firstName과firstName2). 원래 키는 어노테이션에 남습니다. - Jackson은
getURL()을uRL이 아니라url로 읽습니다. getter와 setter에 어노테이션이 없으면 속성이 하나 더 생겨URL을 읽을 때 오류가 납니다. Gson은 필드만 읽으므로 필요 없습니다.
도구 테스트는 javac 21, Jackson 2.17.2, Gson 2.11.0으로 Jackson / Gson 출력을 각각 컴파일하고, 샘플을 읽었다가 다시 쓰면 원래 JSON과 같습니다. Lombok 1.18.34 출력도 모두 컴파일됩니다.
제한
- 없음·Lombok 모드는 Java 이름만 있습니다. 이 두 모드에서
classValue·t2fa는class·2fa에 매핑되지 않습니다. 키가 Java 이름이 될 수 없으면 Jackson이나 Gson 모드를 쓰세요. - Jackson은 빈 키를 쓸 수 없습니다.
@JsonProperty("")는 ‘기본 이름을 쓴다’는 뜻이라 키""에는@JsonAlias("")와 주석을 출력합니다. Jackson은{"": 4}를 읽지만 다시 쓰면{"t": 4}가 됩니다. Gson 모드는@SerializedName("")로 빈 키를 유지합니다.
FAQ
이 도구는 무엇을 생성합니까?
JSON에서 Java POJO(Plain Old Java Object) 클래스를 생성합니다. 중첩 객체는 각각 독립된 public 클래스가 되며, private 필드와 getter/setter 메서드를 포함합니다(Lombok 모드에서는 @Data 사용).
어떤 어노테이션 모드를 지원합니까?
4가지 모드: 없음(순수 POJO, getter/setter 포함), Jackson(@JsonProperty), Gson(@SerializedName), Lombok(@Data). Jackson·Gson 모드는 JSON 키와 필드명이 다를 때 필드에 어노테이션을 붙입니다. Jackson이 getter / setter에서 얻는 이름이 필드명과 다를 때(getURL은 url로 읽힘) Jackson 모드는 getter와 setter에도 붙입니다. 없음·Lombok 모드는 원래 키를 보존하지 않습니다.
JSON 타입은 Java 타입으로 어떻게 매핑됩니까?
string→String, integer→int (int 범위 밖이면 long), float/double→double, boolean→boolean, null→Object, array→List<T>, 중첩 객체→독립 클래스.
List 임포트는 언제 추가됩니까?
배열 필드가 있을 때 import java.util.List가 자동으로 추가됩니다.
데이터가 서버로 전송됩니까?
아니요. 모든 변환은 브라우저에서 실행됩니다. 데이터는 외부로 전송되지 않습니다.