타입 생성

JSON to Go실제 응답을 바탕으로 만드는 모델

두 예제 레코드의 차이를 확인하세요. 결과에는 패키지 선언과 필요한 import가 포함됩니다.

JSON to Go

JSON 입력

현재 브라우저에서 분석하고 생성합니다. 입력을 업로드하거나 저장하지 않습니다.

Go 결과

생성 옵션

any의 숫자는 Decoder.UseNumber()가 필요합니다. 포인터는 누락과 null을 구분하지 않습니다.

선언 3개 · 포인터 타입 2개

JSON to Go는 API 응답으로 모델 초안을 만들 때 유용합니다. 같은 응답의 여러 레코드를 배열에 넣어 누락되는 필드, null, 타입 변화를 함께 반영하세요.

표본에 없는 값이나 필수 조건은 알아낼 수 없습니다. 생성한 타입을 실제 API 계약과 비교하고 프로젝트에서 테스트해야 합니다.

JSON to Go를 사용하는 이유

첫 레코드 다음도 확인

JSON to Go는 같은 배열 위치의 모든 원소를 검사합니다. 두 번째 레코드에만 있는 필드도 남기고, 구체적인 값과 null 또는 누락이 함께 관찰되면 포인터를 사용할 수 있습니다.

필드가 다른 두 레코드 카드가 하나의 구조로 합쳐지고 빈 표식이 누락값의 포인터를 나타냅니다.

숫자를 먼저 반올림하지 않음

int64 범위의 일반 정수는 int64가 됩니다. 소수, 지수, 범위 밖 정수는 json.Number를 사용해 JavaScript 부동소수점 변환 중 자릿수가 사라지는 일을 피합니다.

긴 숫자 블록이 끝부분을 잃지 않고 결과 구조의 같은 길이 슬롯으로 들어갑니다.

저장 전에 모델 확인하기

01

대표적인 변형 추가

같은 응답 형식의 레코드를 배열로 묶으세요. 다른 속성 위치의 객체는 모양이 같아도 별도 중첩 타입을 사용합니다.

02

추론 범위 선택

시간 원문이 필요하면 날짜 추론을 끄세요. 중첩 이름을 끄면 익명 구조체를 만듭니다. json 태그를 끄면 원래 키의 매핑도 사라지므로 디코딩 전에 확인해야 합니다.

03

현재 설정으로 갱신

자동 생성은 수정 후 350ms를 기다립니다. 끄면 생성 버튼이나 Ctrl/Cmd+Enter를 사용합니다. 수정 즉시 내보내기를 막고 최신 결과가 성공한 뒤 다시 활성화합니다.

필드 이름과 타입의 결정

내보낸 이름과 태그

Go 구조체 변환기는 snake_case와 camelCase를 대문자로 시작하는 ASCII 이름으로 만듭니다. ID 같은 약어를 유지하고 충돌에는 숫자를 붙입니다. 태그가 켜져 있으면 지원되는 원래 키를 보존합니다.

근거가 있는 포인터 타입

구체적인 스칼라나 구조체에 누락 또는 null이 있으면 기본적으로 포인터 타입을 씁니다. 슬라이스와 맵은 자체로 nil을 나타냅니다. null만 있으면 any이며 포인터도 누락과 명시적 null을 구분하지 못합니다.

수치 표기를 기준으로 선택

일반 정수 표기이면서 int64 범위 안일 때만 int64입니다. 1.0과 1e3도 json.Number로 처리합니다. encoding/json이 그 표기를 정수로 직접 디코딩하지 않기 때문이며, 계산 전 변환 오류도 확인해야 합니다.

날짜와 중첩 타입

완전하고 유효한 RFC3339이며 소수 초가 아홉 자리 이하인 문자열만 time.Time으로 추론합니다. 같은 위치의 모든 비-null 문자열이 조건을 충족해야 합니다. 루트 타입 별칭은 원래 타입의 디코딩 메서드를 보존합니다.

호환성과 추론의 한계

Go 프로젝트용 초안
any를 사용하는 Go 1.18 이상과 encoding/json v1 호환 태그를 대상으로 합니다. Schema, omitempty, 사용자 정의 디코더, 검증기나 실행 앱을 생성하지 않습니다. 프로젝트에서 gofmt와 테스트를 실행하세요.
모든 키를 태그로 표현할 수 없음
태그 사용 중 빈 키, 쉼표, 따옴표, 역슬래시, 백틱, 제어 문자와 이모지는 경로 오류를 냅니다. 맵이나 사용자 정의 디코더를 사용하세요. 키 -는 필드 무시를 방지하는 태그 -,로 지원합니다.
범용 타입의 숫자는 별도 설정
혼합 타입은 any, 빈 배열은 []any, 빈 객체는 map[string]any입니다. 이 위치의 숫자를 보존하려면 Decoder.UseNumber()를 호출해야 합니다. 기본 디코더는 float64를 쓰며 타입 생성만으로 바뀌지 않습니다.
시간 문자열의 완전한 왕복은 아님
잘못된 날짜, 날짜만 있는 값, 시간대 누락과 아홉 자리 초과 소수 초는 string으로 남습니다. time.Time은 다시 인코딩할 때 시간대 표기와 끝의 0을 정규화할 수 있습니다. 원문이 중요하면 날짜 추론을 끄세요.
엄격한 입력과 처리 상한
주석, 중복 키, 후행 쉼표, 여러 문서를 거부합니다. URL 가져오기, 파일 입력, 자동 복구는 없습니다. 입력 500,000자, 깊이 100, 노드 50,000개, 선언 1,000개, 출력 1,000,000자가 상한입니다.

JSON to Go 질문

JSON 키는 어떤 Go 필드 이름으로 바뀌나요?

대문자로 시작하는 내보낸 ASCII 이름으로 바꾸고 ID 등 약어를 유지합니다. 충돌에는 숫자 접미사를 붙이며, 켜진 태그가 원래 키를 연결합니다. 태그를 끄면 디코더의 필드 이름 매칭 결과가 달라질 수 있습니다.

null 또는 빠진 필드는 어떤 타입인가요?

스칼라나 구조체 타입의 근거가 있으면 포인터를 사용하고 null만 있으면 any를 씁니다. 슬라이스와 맵은 nil을 직접 나타냅니다. 누락과 명시적 null은 포인터만으로 구분할 수 없습니다.

정수와 소수는 각각 어떤 타입이 되나요?

int64 범위의 일반 정수 토큰은 int64이고, 소수나 지수 또는 더 큰 정수는 json.Number입니다. 혼합 any 위치는 Decoder.UseNumber()를 따로 설정해야 합니다.

배열의 같은 필드에 여러 타입이 있으면 어떻게 되나요?

호환되지 않는 값이 같은 위치에 나타나면 any가 됩니다. 첫 원소만 보지 않고 모든 원소를 검사하므로 뒤쪽에서 나타난 타입 차이도 반영됩니다.

어떤 최상위 JSON 값을 입력할 수 있나요?

JSON to Go는 객체, 배열, 문자열, 숫자, 불리언과 null을 지원합니다. 객체가 아닌 루트는 타입 별칭으로 만들기 때문에 time.Time과 json.Number의 기존 메서드가 유지됩니다.

추론 사례를 개선하고 싶으신가요?

실제 응답으로 확인하세요

JSON to Go에 여러 응답을 넣고 포인터, 숫자, 날짜 선택을 검토한 뒤 프로젝트에서 파일을 테스트하세요.