본문 바로가기

JSON → DTO 변환기

JSON을 붙여넣으면 클래스 코드로 바꿔 줍니다. Python·Java·Kotlin·C#을 지원하고, 반대로 코드를 넣으면 JSON 예시가 만들어집니다.

로딩 중...

왜 만들었나요

API 문서에 적힌 예시 JSON을 보고 모델 클래스를 손으로 옮겨 적는 일이 잦았습니다. 필드가 스무 개 넘어가면 오타 하나 찾느라 시간을 다 쓰게 되더군요. 붙여넣기 한 번으로 클래스 생성이 끝나면 될 일이라 JSON → DTO 변환기를 만들었습니다.

Note

붙여넣은 JSON과 코드는 서버로 전송되지 않습니다. 변환이 전부 브라우저 안에서 이뤄져, 사내 API 규격이나 미공개 데이터 구조도 기기 밖으로 나가지 않습니다.


JSON → DTO 변환기 사용 방법

  1. JSON → DTO 변환기 위쪽 JSON 패널에 데이터를 붙여넣거나 샘플 버튼으로 예제를 불러옵니다.

    주문 JSON을 위쪽 JSON 칸에 붙여넣은 화면 — 머리줄에 루트 이름 RootObject 칸이 있다

  2. 아래쪽 패널 위에서 Python · Java · Kotlin · C# 중 언어를 고릅니다.

    언어 탭에서 Java를 골라 아래쪽 코드가 public class Item·RootObject 형태의 Java 클래스로 바뀐 화면

  3. 만들어진 클래스 코드를 복사 버튼으로 가져갑니다. 반대로 코드를 직접 고치면 그 구조에 맞는 JSON 예시가 위쪽에 만들어집니다.

이렇게 나옵니다

주문 응답 JSON을 Kotlin으로 바꾸면 이렇게 나옵니다.

넣은 것                          나온 것 (「루트 이름」 칸에 Order 를 넣은 경우)
{                                data class Item(
  "id": 1,                           val sku: String
  "name": "사과",          →       )
  "items": [ {"sku":"A1"} ]
}                                data class Order(
                                     val id: Long,
                                     val name: String,
                                     val items: List<Item>
                                 )

중첩된 객체는 자동으로 별도 클래스로 분리되고, 같은 모양의 객체는 하나의 클래스로 재사용됩니다. 안쪽 클래스가 먼저 나오고 최상위 클래스가 마지막에 붙습니다. 「루트 이름」 칸을 비워 두면 최상위 이름은 RootObject 가 됩니다.

알아두면 좋은 것

언어마다 나오는 모양이 다릅니다

같은 JSON을 넣어도 언어별로 만들어지는 코드의 결이 다릅니다.

언어나오는 형태필드 한 줄 예시
PythonpydanticBaseModel 상속 + importname: str
Java클래스와 private 필드 선언만private String name;
Kotlindata class (생성자 파라미터로)val name: String
C#클래스와 자동 구현 속성public string name { get; set; }

Java 는 필드 선언까지만 나옵니다. 게터·세터 메서드나 @JsonProperty 같은 어노테이션은 붙지 않으니, 쓰기 전에 프로젝트 규칙대로 채워 넣어야 합니다. C# 은 get; set; 이 함께 나와 그대로 쓰기 쉽습니다. Kotlin 은 data class 라 생성자와 equals 가 언어 차원에서 따라옵니다. import 줄은 필요할 때만 붙습니다. Python 은 List·Optional·Any 중 실제로 쓰인 것만 넣고, Java 는 목록 필드가 있을 때 import java.util.List; 한 줄이 들어갑니다.

값의 종류를 어떻게 정하나

JSON 값PythonJavaKotlinC#
"text"strStringStringstring
42intlongLonglong
4.7floatdoubleDoubledouble
trueboolbooleanBooleanbool
[ … ]List[T]List<T>List<T>List<T>
null·누락 (다른 값이 있을 때)Optional[…] = None박싱 타입T? = nullT?
값이 모두 nullOptional[Any] = NoneObjectAny? = nullobject?

필드 이름은 영문·숫자·밑줄로 된 키는 그대로 쓰고, 하이픈·점·한글처럼 변수 이름에 쓸 수 없는 글자는 밑줄로 바뀝니다(숫자로 시작하면 앞에 밑줄이 붙습니다). C# 관례처럼 첫 글자를 대문자로 쓰려면 나온 코드에서 직접 손봐야 합니다.

한글 키는 이름이 남지 않습니다. 이름·주소처럼 두 글자 한글 키는 둘 다 __가 되기 때문에, 같은 클래스에서 겹치면 뒤쪽에 번호를 붙여 __·__2로 구분합니다. 대신 원래 키를 줄 끝 주석으로 남기니 어느 항목인지 보고 이름을 고쳐 쓰면 됩니다.

private String __;   // 이름
private Item __2;    // 주소
private long user_id; // user-id

객체 배열은 모든 요소의 키를 합쳐서 클래스를 만들고, 일부에만 있는 키는 선택 필드로 처리합니다.

이런 경우에는

숫자 종류가 예상과 달라요

JSON에는 정수와 실수 구분만 있고 크기 정보가 없습니다. 그래서 안전하게 큰 종류(Java·Kotlin은 long·double)로 만듭니다. 값 범위가 작다고 확신하면 코드에서 직접 바꿔 쓰세요.

`null`이 든 필드가 이상하게 나와요

값이 null이면 원래 어떤 종류였는지 알 수 없습니다. 같은 필드에 값이 든 다른 샘플이 있으면 그 종류를 쓰고, 모든 샘플이 null이면 종류를 추측하지 않고 아무 종류(Java Object, Python Any, Kotlin Any?, C# object?)로 둡니다. 예시 JSON에 실제 값이 든 샘플을 쓰면 정확해집니다.

만든 코드를 그대로 써도 되나요

JSON → DTO 변환기가 만든 코드는 초안으로 쓰고 손보는 것을 권합니다. 필드 이름 규칙, 직렬화 설정, 검증 규칙은 프로젝트마다 다르기 때문입니다. 특히 게터·세터와 직렬화 어노테이션은 만들지 않으므로, 이 둘이 필요한 Java 같은 곳에서는 손으로 채워야 합니다. 옮겨 적는 수고를 덜어 주는 도구로 보시면 됩니다.

이 도구로는 안 되는 것

  • 게터·세터·어노테이션은 만들지 않습니다 — 필드 선언까지가 결과입니다
  • JSON을 정렬만 하려면 JSON 포맷터
  • 구조를 눈으로 살피려면 JSON 뷰어
  • 필드를 골라 빼려면 JSON 편집기

용어 설명

DTO

데이터를 주고받는 데만 쓰는 클래스입니다. 서버와 앱이 JSON을 주고받을 때, 그 JSON 모양을 코드에서 다루기 쉽게 옮겨 놓은 그릇이라고 보면 됩니다.

중첩 객체

JSON 안에 또 다른 객체가 들어 있는 구조입니다. 주문 안에 상품 정보가 통째로 들어가는 식입니다. 코드로 옮길 때는 각각 별도 클래스로 나누는 게 일반적입니다.

JSON → DTO 변환기 자주 묻는 질문

어떤 언어의 클래스로 바꿀 수 있나요?

Python(pydantic)·Java·Kotlin·C# 네 가지를 지원합니다. 가운데 언어 버튼으로 바꾸면 같은 JSON이 그 언어의 관용적인 클래스 코드로 즉시 다시 그려지고, 오른쪽 패널의 복사 버튼으로 가져갈 수 있습니다.

코드를 고치면 JSON도 같이 바뀌나요?

네. 양방향으로 동작합니다. 왼쪽 JSON을 고치면 오른쪽 클래스 코드가 갱신되고, 반대로 오른쪽 코드에 필드를 추가하거나 이름을 바꾸면 그 구조에 맞는 JSON 샘플이 왼쪽에 다시 만들어집니다. 샘플 값은 문자열이면 "string", 숫자면 0처럼 형식별 예시 값으로 채워집니다.

클래스 이름은 어떻게 정해지나요?

위쪽 "루트 이름" 칸에 원하는 이름을 넣으면 그 이름이 가장 바깥 클래스에 붙습니다(비워 두면 RootObject). 중첩된 객체는 그 키 이름을 대문자 표기로 바꿔 별도 클래스가 되고, 배열이면 복수형을 단수로 바꿔 이름을 만듭니다(items → Item).

키 이름에 하이픈이나 한글이 섞여 있으면 어떻게 되나요?

해당 언어에서 변수 이름으로 쓸 수 없는 문자는 밑줄(_)로 바꿔 코드를 만듭니다. 숫자로 시작하는 키에는 앞에 밑줄을 붙입니다. 그대로 써도 되는 키는 원본을 유지하므로, JSON과 코드를 오가도 이름이 어긋나지 않습니다.

붙여넣은 JSON이 서버로 전송되나요?

전송되지 않습니다. 변환이 전부 브라우저 안에서 이뤄지고 어디에도 저장되지 않아, 사내 API 응답 예시나 공개되지 않은 데이터 구조도 안심하고 붙여넣을 수 있습니다.

마지막 업데이트: