본문으로 건너뛰기

JSON을 Go 구조체로 변환

json-to-go 포트로 JSON에서 Go struct 정의를 생성하고 gofmt로 포맷합니다. 키는 json:"..." 태그가 붙은 exported CamelCase 필드가 되고, 중첩 객체는 인라인 익명 struct, null은 any가 됩니다.

서드파티 REST API 응답을 json.Unmarshal할 struct를 작성할 때.

이럴 때 사용하세요

  • 서드파티 REST API 응답을 json.Unmarshal할 struct를 작성할 때.
  • 예시 페이로드로 Go HTTP 핸들러의 요청·응답 타입 뼈대를 만들 때.

사용 방법

  1. 왼쪽 편집기에 JSON 객체나 배열을 붙여 넣습니다.
  2. 생성된 struct를 확인합니다. 루트 타입 이름은 항상 AutoGenerated입니다.
  3. 패키지에 복사하고 타입 이름을 바꿉니다. 인라인 struct를 재사용한다면 이름 있는 타입으로 분리하세요.

JSON

{
  "id": 42,
  "user_name": "ada",
  "score": 9.5,
  "active": true,
  "deleted_at": null,
  "tags": ["go", "json"],
  "address": { "city": "Tokyo", "zip": "100-0001" }
}

Go struct

type AutoGenerated struct {
	ID        int      `json:"id"`
	UserName  string   `json:"user_name"`
	Score     float64  `json:"score"`
	Active    bool     `json:"active"`
	DeletedAt any      `json:"deleted_at"`
	Tags      []string `json:"tags"`
	Address   struct {
		City string `json:"city"`
		Zip  string `json:"zip"`
	} `json:"address"`
}

세부 정보 및 제한 사항

생성은 브라우저에서 실행됩니다. 타입 이름, 인라인/이름 있는 struct, 태그에 대한 설정은 없습니다.

두문자어는 대문자로 바뀌고(id → ID) snake_case는 CamelCase가 되며, 원래 키는 json 태그에 남습니다.

정수는 int(큰 값은 int64), 소수는 float64가 됩니다. null, 빈 배열, 타입이 섞인 배열은 any 또는 []any가 됩니다.

배열 안 객체 구조가 다르면 일부에 없는 키에 ,omitempty가 붙습니다.

FAQ

루트가 배열인 JSON도 변환할 수 있나요?

네. 배열 안 모든 객체의 필드를 병합한 type AutoGenerated []struct{...}가 생성됩니다.

null 필드가 왜 any 타입인가요?

null 값에는 타입 정보가 없습니다. nil을 계속 허용하려면 any를 *string이나 *time.Time 같은 포인터로 바꾸세요.

이름 있는 중첩 struct를 생성하나요?

아니요. 중첩 객체는 인라인 익명 struct입니다. 참조해야 한다면 직접 이름 있는 타입으로 옮기세요.

사양 및 참고 자료