JSON → Java POJO

JSON에서 Java POJO 클래스를 즉시 생성. Jackson, Gson, Lombok 어노테이션 지원. 중첩 객체, 배열, 커스텀 루트 클래스명 처리. 무료, 브라우저 완결.

  • 브라우저에서 처리
  • 데이터가 브라우저 밖으로 나가지 않습니다
  • 무료 · 회원가입 불필요
비워 두면 RootObject를 사용합니다. 이름을 바꾸면 300밀리초 후 다시 생성합니다.
어노테이션 없음, Jackson, Gson, Lombok (@Data) 중에서 선택하세요. 어노테이션을 바꾸면 즉시 다시 생성합니다.
JSON을 중첩 객체, 배열, null이 포함된 예시로 바꾸고 현재 설정으로 즉시 생성합니다.
JSON, 출력, 상태를 지우고 루트 이름과 선택한 모드는 유지합니다. 도구 안에서 Ctrl/⌘+L을 누르면 루트 이름도 지웁니다.
주석이나 끝 쉼표가 없는 유효한 JSON을 입력하세요. 입력을 멈춘 뒤 300밀리초 후 생성합니다. JSON이 잘못되면 출력을 지우고 오류를 표시합니다.
Java 출력
현재 표시된 Java 출력 전체를 복사합니다. 출력이 비어 있으면 복사하지 않습니다.

JSON을 입력하거나 예시를 불러와 Java 코드를 생성하세요.

예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.

타입 매핑

  • 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가 자동으로 추가됩니다.

데이터가 서버로 전송됩니까?

아니요. 모든 변환은 브라우저에서 실행됩니다. 데이터는 외부로 전송되지 않습니다.