도구
가이드

JSON → 코드 생성기

JSON

JSON에서 TypeScript, Java, Go, C# 엔티티 타입을 생성합니다. 중첩 객체와 배열을 추론합니다.

100% 클라이언트 백엔드 없음

원격 URL은 가져오지 않습니다. JSON을 직접 붙여넣으세요.

JSON
출력
이 페이지에서

JSON to 코드 생성기란?#

JSON to 코드 생성기는 샘플 JSON 문서를 읽고 데이터의 모양 을 알아내어(어떤 필드가 문자열이고, 숫자이고, 중첩 객체이고, 무엇의 배열인지) 실제 프로그램이 그 데이터를 담으려 쓸 엔티티 타입을 써냅니다. API 응답에 맞추어 TypeScript 인터페이스, Java 클래스, Go 구조체, C# 클래스를 손으로 코딩하는 대신, 예시 응답 하나를 붙여 넣어 프로젝트에 바로 떨어뜨릴 수 있는 타입을 얻습니다.

내부적으로는 파싱된 값을 따라가며 스키마를 추론합니다. 중첩 객체는 자기 이름을 가진 타입이 되고, 배열의 요소 타입은 모든 요소의 모양을 병합한 것입니다(같은 키를 갖지 않는 객체들의 목록도 필드의 합집합을 가진 하나의 타입을 만듭니다). 올바른 식별자가 아닌 필드 이름(하이픈이 들어간 first-name 같은 키나 숫자로 시작하는 키)은 합법적 식별자로 정제되고, 원래 키는 직렬화 어노테이션으로 보존되어 왕복이 여전히 동작합니다.

출력은 이 페이지에 대한 런타임 의존성이 없는 일반 텍스트 소스 코드입니다. 복사해서 코드베이스에 붙여넣고 타입 이름을 조정하면 출발점이 됩니다. 완성된 모델이 아니라 지루한 뼈대를 대신 써주는 것입니다.

사용 방법#

  1. 언어 드롭다운으로 대상을 고르세요. TypeScript, Java, Go, C# 중 하나입니다.
  2. 루트 이름 (기본값 Root)을 정하세요. 가장 바깥 타입의 이름이 됩니다. 예를 들어 User, Order, Response.
  3. 왼쪽 패널에 JSON을 붙여넣으세요. 오른쪽에 생성된 코드가 실시간으로 나타나며, 상태 줄은 오류(잘못된 JSON, 빈 입력)를 보고합니다.
  4. 복사 로 코드를 클립보드에 가져가세요.
  5. 예제 는 하위 객체와 배열이 있는 중첩 객체를 불러오고, 지우기 는 양쪽 패널을 초기화합니다.

주요 기능#

  • 네 가지 대상 언어. TypeScript 인터페이스, Java 클래스, Go 구조체, C# 클래스. 하나의 입력에서 드롭다운으로 네 가지 출력을 전환합니다.
  • 리터럴 타이핑이 아니라 스키마 추론. 중첩 객체는 이름 붙은 타입이 되고, 객체의 배열은 불투명한 any 목록이 아니라 이름 붙은 요소 타입을 만듭니다.
  • 이질적 배열 병합. 배열 요소의 필드가 다를 때 추론된 타입은 합집합입니다. 모든 항목이 모든 키를 갖지 않은 지저분한 실제 응답에 유용합니다.
  • 식별자 안전, 키 충실. 올바른 식별자가 아닌 키는 정제되고, 원래 키는 직렬화 어노테이션(@JsonProperty, Go json: 태그, JsonPropertyName)으로 보존되어 원본 JSON이 올바로 역직렬화됩니다.
  • 실시간 로컬. 생성은 타이핑하거나 옵션을 바꿀 때 브라우저에서 실행됩니다. 데이터는 페이지를 떠나지 않습니다.

실전 예시#

언어TypeScript 으로 하고 루트 이름Root로 한 채 예제 를 불러오면 입력은:

{
  "id": 1,
  "name": "Ada",
  "active": true,
  "address": { "city": "London", "zip": "NW1" },
  "tags": ["math", "logic"]
}

생성기는 두 인터페이스를 내보냅니다. 루트와 중첩 객체를 위한 이름 붙은 Address 타입입니다.

export interface Root {
  id: number;
  name: string;
  active: boolean;
  address: Address;
  tags: Array<string>;
}

export interface Address {
  city: string;
  zip: string;
}

언어를 Go 로 바꾸면 같은 입력이 원래 키를 보존하는 json: 태그가 붙은 구조체가 됩니다.

package model

type Root struct {
  Id       float64   `json:"id"`
  Name     string    `json:"name"`
  Active   bool      `json:"active"`
  Address  Address   `json:"address"`
  Tags     []string  `json:"tags"`
}

type Address struct {
  City  string  `json:"city"`
  Zip   string  `json:"zip"`
}

JSON 숫자인 id가 TypeScript에서는 number, Go에서는 float64가 되는 점에 주목하세요. 생성기는 정수와 부동소수를 구분하여 추측하지 않습니다. JSON 자신이 이를 구분하지 않기 때문입니다.

FAQ#

왜 내 정수 필드가 float64 / Double / double로 타이핑되나요?#

JSON은 단일 숫자 타입만 있고 55.0을 구분할 방법이 없기 때문입니다. 생성기는 모든 JSON 숫자를 대상 언어의 일반 숫자 타입으로 매핑합니다. TypeScript의 number, Java의 Double, Go의 float64, C#의 double이며, 값이 무엇이든 담을 만큼 넓습니다. 필드가 항상 정수임을 안다면, 나중에 손으로 int / Long / int64로 좁히세요.

내 배열의 객체가 모두 같은 필드를 갖지 않을 때 어떻게 되나요?#

모양이 병합됩니다. [{ "a": 1 }, { "a": 2, "b": "x" }] 같은 배열은 ab 모두를 가진 하나의 요소 타입을 만들어 하나의 타입이 모든 항목을 덮습니다. 두 요소가 호환되지 않는 방식으로 필드 타입이 다르면(여기서는 숫자, 저기서는 문자열), 그 필드는 한쪽을 택해 다른 쪽에 대해 틀리기보다 any / Object로 내려갑니다.

내 JSON의 필드에 first-name처럼 하이픈이 있습니다. 깨지나요?#

아니요. 생성기는 first-name을 합법적 식별자(firstName)로 바꾸어 필드 이름으로 쓰고, 원래 키를 기록하는 직렬화 어노테이션을 내보냅니다. Java의 @JsonProperty("first-name"), Go의 json:"first-name" 태그, C#의 [JsonPropertyName("first-name")], TypeScript의 따옴표로 감싼 "first-name" 키입니다. 따라서 생성된 코드는 원본 JSON을 바꾸지 않고 역직렬화합니다.

null 값에는 무엇을 하나요?#

값이 null인 필드는 알 수 없는 타입으로 취급됩니다. TypeScript에서는 선택적 any(field?: any;)가 되고, Java와 C#에서는 Object / object가 되며, Go에서는 interface{}가 됩니다. 이는 의도적 신호입니다. null은 필드가 있을 때 무엇을 담는지 아무것도 알려주지 않으므로 생성기는 추측을 거부하고 사용자가 채워 넣도록 남겨둡니다.