기능
JSON Go 변환기는 JSON 샘플을 읽어 encoding/json에 바로 쓸 수 있는 json 태그가 붙은 Go 구조체 정의를 작성합니다. 호출하는 API의 응답을 붙여 넣으면 모든 필드와 태그를 손으로 쓰지 않아도 json.Unmarshal에 바로 넘길 수 있는 타입을 얻습니다.
변환기는 샘플의 모든 값을 살펴봅니다. 중첩된 객체는 자체 구조체가 되고, 배열의 모든 요소는 하나의 요소 타입으로 합쳐지며, 일부 요소에 없거나 가끔 null인 필드는 선택적으로 감지됩니다. 출력은 gofmt가 정렬하는 방식으로 배치됩니다.
사용 방법
- JSON을 입력란에 붙여 넣고,
.json파일을 업로드하거나 예시를 클릭합니다. - 루트 타입 이름을 정하고 중첩 객체를 쓰는 방식,
omitempty를 붙일 필드, null 가능 필드에 포인터를 쓸지 고릅니다. - Go 코드를 복사하거나
.go파일로 내려받은 뒤package줄을 추가합니다.
잘못된 JSON은 문제가 있는 줄과 열과 함께 표시됩니다.
예시
이 JSON은:
{ "id": 7, "user_name": "ada", "tags": ["admin"], "profile": { "avatar_url": "https://example.com/a.png" } }
다음 구조체가 됩니다:
type Root struct {
ID int `json:"id"`
UserName string `json:"user_name"`
Tags []string `json:"tags"`
Profile Profile `json:"profile"`
}
type Profile struct {
AvatarURL string `json:"avatar_url"`
}
팁
- 샘플 하나는 그 안에 있는 내용만 보여 줍니다. 값이 숫자일 수도 문자열일 수도 있다면 둘 다 넣거나, 여러 샘플을 배열에 담아 합쳐지게 하세요.
- 타임스탬프는 문자열로 들어옵니다. 형식이 RFC 3339라면 타입을 직접
time.Time으로 바꾸세요. - 필드가 완전히 같은 객체는 하나의 구조체를 공유하므로 같은 형태가 여러 곳에 나와도 출력이 짧게 유지됩니다.
- TypeScript도 작성하나요? JSON TypeScript 변환기는 같은 추론으로 인터페이스를 만듭니다.
자주 묻는 질문
› 필드 이름은 어떻게 정해지나요?
각 JSON 키는 PascalCase의 내보낸 Go 이름으로 바뀌고, 흔한 약어는 golint가 기대하는 대로 대문자로 씁니다. 그래서 user_id는 UserID, avatar_url은 AvatarURL이 됩니다. 원래 키는 json 태그에 남으므로 encoding/json이 필드를 정확히 매핑합니다.
› 어떤 Go 타입이 쓰이나요?
문자열은 string, 정수는 int(32비트에 맞지 않는 값이 있으면 int64), 소수는 float64, 불리언은 bool이 됩니다. 배열은 슬라이스, 빈 객체는 map[string]any, null만 있거나 여러 종류가 섞인 값은 any가 됩니다.
› 이름 있는 구조체와 인라인 구조체는 어떻게 다른가요?
이름 있는 모드는 중첩된 객체마다 Address나 Order 같은 별도 타입을 만들어 재사용과 테스트가 쉽습니다. 인라인 모드는 익명 구조체 타입을 부모 안에 바로 넣어 모든 것을 하나의 선언에 담으며, 많은 간단한 변환기가 이 방식을 씁니다.
› omitempty는 언제 붙나요?
기본적으로 선택적 필드, 즉 배열 안 일부 객체에 없거나 가끔 null인 필드에만 붙습니다. 모든 필드에 붙이거나 전혀 붙이지 않을 수도 있습니다. 포인터를 켜면 누락이나 null을 0 값과 구분할 수 있습니다.
› 내 JSON이 업로드되나요?
아니요. 구조체는 브라우저에서 생성되며 서버로 아무것도 전송되지 않습니다.