JSON으로 타입 만들기
샘플을 넣고 타입을 받는다.
예제는 입력과 설정을 일시적으로 바꿉니다. 이전 작업을 복원할 수 있습니다.
0자
출력
위에 붙여넣거나 입력하면 여기에 결과가 표시됩니다.
파일은 내 기기 밖으로 나가지 않습니다
이 도구는 브라우저 안에서만 작동합니다. 붙여넣은 내용은 기기에서 처리되고 서버로 전송되지 않으므로 토큰, 키, 공개 전 문서도 안심하고 사용할 수 있습니다.
사용 예시
예: 미세먼지 측정소 API 응답을 TypeScript 타입으로 — 측정값이 null인 측정소 포함
미세먼지 알림 앱을 만들면서, 공공 데이터 형식의 측정소별 실시간 측정 응답을 붙여 넣은 장면입니다. 2026-10-28 14:00 기준 중앙동 측정소(PM10 42, PM2.5 18)와 시청앞 측정소(PM10 null, PM2.5 21) 두 곳, 전체 건수 2, 페이지 1이 들어 있습니다. 설정은 TypeScript, 타입 이름 AirQualityResponse, 들여쓰기 공백 4칸입니다.
- items 배열 안의 객체에는 Item이라는 이름이 붙습니다(필드 이름 items에서 끝의 s를 뗀 이름). 두 측정소의 항목이 같아서 타입은 하나입니다.
- 시청앞의 pm10Value가 null이라서 pm10Value는 number | null이 됩니다. 값이 빠지는 경우를 코드에서 처리해야 한다는 표시입니다.
- khaiGrade는 "2"처럼 따옴표 안에 있으므로 숫자가 아니라 string입니다. 숫자로 쓰려면 Number()로 바꾸거나 타입을 직접 고칩니다.
- dataTime "2026-10-28 14:00"도 string입니다. 날짜라는 것은 샘플만으로는 알 수 없습니다.
| 필드 | 샘플 값 | 타입 |
|---|---|---|
| items | 측정소 2곳 | Item[] |
| totalCount | 2 | number |
| stationName | "중앙동", "시청앞" | string |
| pm10Value | 42, null | number | null |
| pm25Value | 18, 21 | number |
| khaiGrade | "2", "2" | string |
AirQualityResponse와 Item, 인터페이스 2개(종류 수 2)가 공백 4칸 들여쓰기로 나옵니다. Item은 너무 일반적인 이름이니 Station처럼 바꿔 두면 다른 API의 items와 헷갈리지 않습니다.
사용 방법
- 실제 응답을 붙여넣습니다. 지어낸 것보다 진짜 한 건이 낫습니다.
- TypeScript·Go·Zod 중에서 고릅니다.
- 최상위 타입 이름을 정합니다. 비우면 Root 입니다.
- 결과를 복사하고 한 번 읽어 보세요. 샘플 한 건에서 나온 추론은 명세가 아니라 초안입니다.
자주 묻는 질문
- 배열은 첫 요소만 보나요?
- 전부 봅니다. [{a:1},{a:1,b:2}] 면 b 는 optional 이 됩니다. 없는 셈 치는 것이 생성된 타입이 2주 뒤에 거슬리게 되는 원인입니다.
- null 은 어떻게 다루나요?
- 좁히지 않고 넓힙니다. 한 번 null 이었던 항목은 null 이 될 수 있는 항목이므로 TypeScript 에서는 유니온, Go 에서는 포인터가 됩니다. 실제 API 의 동작도 대개 그쪽입니다.
- 같은 모양의 객체는 하나의 타입이 되나요?
- 됩니다. 항목 이름이 같은 객체는 같은 이름의 타입을 공유하므로 사용자가 50건이어도 User 타입은 하나입니다.
- 나온 타입을 그대로 믿어도 되나요?
- 출발점으로만 믿으세요. 샘플 한 건으로는 그 항목이 열거형인지, 숫자가 정수인지, 문자열이 날짜인지 알 수 없습니다. 읽고 조여 주세요. 아끼는 것은 타이핑이지 생각이 아닙니다.
- JSON이 배열로 시작하면 어떻게 되나요?
- 배열 요소 하나를 나타내는 타입이 입력한 이름으로 만들어집니다. 요소는 모두 읽으므로 일부에만 있는 필드는 선택(?)이 됩니다. TypeScript에서는 마지막 줄에 OrderList = Order[] 같은 목록 타입도 추가됩니다.
- 숫자는 왜 정수가 아니라 number(Go에서는 float64)로 나오나요?
- 샘플만으로는 그 숫자가 항상 정수인지 알 수 없기 때문입니다. 오늘의 24가 내일은 24.5일 수도 있습니다. TypeScript와 Zod는 number, Go는 float64로 씁니다. ID나 개수가 항상 정수라면 Go에서는 int나 int64로, Zod에서는 .int()를 붙여 고치세요.
- 입력한 내용이 어디로 전송되나요?
- 아니요. 브라우저 안에서 동작하므로 붙여넣은 내용은 내 컴퓨터를 떠나지 않습니다.