JSON → Go 구조체
JSON에서 json 태그가 있는 Go 구조체를 즉시 생성. 중첩 객체, 슬라이스, 포인터 nullable 필드, omitempty 태그 지원. 무료, 브라우저에서 실행.
- 브라우저에서 처리
- 데이터가 브라우저 밖으로 나가지 않습니다
- 무료 · 회원가입 불필요
WeChat으로 스캔하여 공유
예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.
타입 매핑
null→interface{}- 문자열 →
string - 정수 →
int - 부동소수점 →
float64 - 불리언 →
bool - 배열 →
[]T - nullable/선택적 → 포인터 (
*T) - 중첩 객체 → 독립적으로 명명된
struct
예시: API 응답
{
"user": {
"id": 42,
"name": "Alice",
"email": "alice@example.com",
"is_active": true,
"roles": ["admin", "editor"],
"address": { "city": "New York", "country": "US", "zip_code": "10001" },
"last_login": null
}
}
에서 다음이 생성됩니다:
type RootObject struct {
User User `json:"user"`
}
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
IsActive bool `json:"is_active"`
Roles []string `json:"roles"`
Address Address `json:"address"`
LastLogin interface{} `json:"last_login"`
}
type Address struct {
City string `json:"city"`
Country string `json:"country"`
ZipCode string `json:"zip_code"`
}
snake_case 키는 CamelCase 필드 이름이 되고 json 태그에 원래 키가 남아 encoding/json이 양방향으로 매핑합니다. 필드가 정렬되어 있지 않으므로 gofmt(또는 저장할 때 포맷하는 편집기)로 태그를 맞추세요. 표준 라이브러리로 디코딩합니다:
var root RootObject
if err := json.Unmarshal(data, &root); err != nil {
log.Fatal(err)
}
fmt.Println(root.User.Name) // Alice
예시: 최상위가 배열인 경우
[{"sku": "A1", "qty": 2}, {"sku": "B2", "note": "gift"}]
에서 다음이 생성됩니다:
type RootObject struct {
Sku string `json:"sku"`
Qty *int `json:"qty,omitempty"`
Note *string `json:"note,omitempty"`
}
최상위가 배열이면 구조체는 요소 하나를 나타내므로 []RootObject로 디코딩합니다. 일부 요소에 없는 키는 omitempty가 붙은 포인터가 됩니다.
예시: 같은 키 이름, 소수, 숫자로 시작하는 키
{
"order": { "id": "A-1001", "total": 19.0, "meta": { "createdBy": "alice", "source": "web" } },
"payment": { "status": "paid", "meta": { "provider": "stripe", "fee": 0.3 } },
"2fa": true
}
생성 결과
type RootObject struct {
Order Order `json:"order"`
Payment Payment `json:"payment"`
X2fa bool `json:"2fa"`
}
type Order struct {
Id string `json:"id"`
Total float64 `json:"total"`
Meta Meta `json:"meta"`
}
type Meta struct {
CreatedBy string `json:"createdBy"`
Source string `json:"source"`
}
type Payment struct {
Status string `json:"status"`
Meta PaymentMeta `json:"meta"`
}
type PaymentMeta struct {
Provider string `json:"provider"`
Fee float64 `json:"fee"`
}
payment.meta는 order.meta와 필드가 달라 별도 구조체가 되며, 부모 이름을 앞에 붙인 PaymentMeta가 됩니다(필드가 같으면 둘이 Meta를 함께 씀). 19.0은 소수점으로 쓰였으므로 total은 float64입니다. encoding/json은 19.0을 int 필드로 디코딩하지 않습니다. 도구는 브라우저의 JSON 원본 텍스트 접근(Chrome 114+, Firefox 135+, Safari 18.4+)으로 숫자가 쓰인 모양을 읽습니다. 지원하지 않는 브라우저에서는 19로 보여 int가 됩니다. 키 2fa는 내보내는 이름의 첫 글자로 쓸 수 없어 필드 이름은 X2fa, 태그는 2fa 그대로입니다.
생성 후 고칠 부분
null은interface{}가 됩니다. API 문서를 확인한 뒤*string,*time.Time같은 실제 타입의 포인터로 바꾸세요..이나 지수가 없는 숫자는int,19.0이나1e3은float64가 됩니다. 같은 배열이나 키에 정수와 소수가 섞이면float64입니다. 샘플이 우연히 정수뿐인 필드(가격 등)는int로 남으니 확인하세요. 64비트 플랫폼에서int는 64비트입니다.[]과 그 밖에 요소 타입이 섞인 배열은[]interface{}가 됩니다.- 필드 이름은 Go의 약어 관례에 맞게 조정되지 않습니다.
id는Id,url은Url이 되지만 Go Code Review Comments는ID,URL을 권장합니다. 어느 쪽이든json태그 덕분에 디코딩은 올바르게 동작합니다. - 필드 이름이 대문자로 시작하지 않는 키(
2fa,名前)는 앞에X를 붙입니다(X2fa). 같은 필드 이름이 되는 두 키(user_id,userId)에는 번호를 붙입니다(UserId2). 빈 키와 구조체 태그에 쓸 수 없는 문자(",,등)가 있는 키는encoding/json이 태그로 연결할 수 없으므로 필드 대신 주석에 적습니다. PaymentMeta,Meta2같은 이름은 JSON 키에서 만들어집니다. 용도에 맞게 이름을 바꾸세요.json태그만 생성됩니다.gorm,bson,validate태그는 직접 추가하세요.
제한 사항
- 입력은 유효한 JSON이어야 합니다. 오류 메시지에 위치가 표시됩니다(끝 쉼표라면
Expected double-quoted property name in JSON at position 8). - 타입은 붙여넣은 샘플에서만 결정됩니다.
FAQ
이 도구는 무엇을 생성하나요?
json 구조체 태그가 있는 Go struct 타입 선언을 생성합니다. 중첩된 각 JSON 객체는 독립적으로 명명된 struct가 됩니다. 배열 필드는 슬라이스([]T)가 됩니다.
nullable 필드는 어떻게 처리되나요?
샘플에서 null만 나오는 키는 타입을 알 수 없어 interface{}가 됩니다. 객체 배열에서 일부 요소는 null이고 다른 요소에는 값이 있는 키는 그 타입의 포인터(*string 등)가 됩니다. 일부 요소에 없는 키는 포인터(슬라이스는 슬라이스 그대로)가 되고 json 태그에 ,omitempty가 붙습니다. null만 섞인 키에는 ,omitempty가 붙지 않습니다.
왜 포인터 타입을 쓰나요?
Go에서는 생략할 수 있거나 null일 수 있는 값을 포인터로 나타내는 것이 관용적인 방법입니다. *string은 nil(키 없음 또는 null)이 될 수 있지만 string은 그럴 수 없습니다.
어떤 json 태그가 생성되나요?
모든 필드에 원래 JSON 키를 그대로 쓴 json 태그가 붙습니다. 그래서 필드 이름을 Go의 공개 이름(대문자 시작)으로 바꿔도 스네이크 케이스나 카멜 케이스 키와 연결됩니다. 배열의 일부 요소에 없는 키에는 ,omitempty도 붙습니다. 빈 키나 큰따옴표, 쉼표처럼 구조체 태그에 쓸 수 없는 문자가 있는 키는 필드 대신 주석으로 남깁니다. 생성하는 태그는 json 태그뿐입니다.
데이터가 서버로 전송되나요?
아니요. 구조체는 브라우저 탭 안에서 생성되며, 입력한 JSON과 루트 구조체 이름을 서버로 보내거나 브라우저 저장소에 저장하지 않습니다. 입력란 편집을 마쳤을 때, Go Struct 생성을 누르거나 예시를 불러올 때 페이지의 방문 통계에 사용 이벤트(도구 이름과 generate라는 동작) 1건만 기록되며 JSON이나 코드는 포함되지 않습니다.