JSON→Go 구조체 변환
JSON 객체(또는 JSON 배열)를 붙여넣으면 대응하는 Go struct 정의와 json 태그를 자동으로 생성합니다.
사용 팁
- 배열의 모든 요소가 객체인 경우, 각 요소의 키를 병합하여 하나의 struct를 생성합니다. 일부 요소에만 존재하는 키에는 자동으로 `omitempty` 태그가 붙습니다.
- 루트 타입 이름은 기본값 "Root"에서 원하는 이름으로 바꿀 수 있습니다. 중첩된 객체의 struct 이름은 해당 속성 이름을 PascalCase로 변환해 자동으로 생성됩니다.
- Go에는 null을 허용하는 기본 타입이 없기 때문에 JSON의 null은 `interface{}`로 출력됩니다. 더 엄격하게 다루고 싶다면 포인터 타입으로 바꾸는 것을 검토해 보세요.
- 생성 결과는 열이 가볍게 정렬된 초안입니다. 붙여넣은 뒤 `gofmt`를 실행하면 프로젝트의 표준 스타일에 맞춰 정렬됩니다.
- API 응답 샘플 JSON을 그대로 붙여넣으면 Go 코드에서 사용할 응답용 struct의 초안을 빠르게 얻을 수 있습니다.
자주 묻는 질문
여담이지만 ― Go가 struct와 json 태그를 함께 쓰는 이유
Go는 정적 타입 언어이며, JSON을 다룰 때 표준 라이브러리의 `encoding/json` 패키지는 struct 필드와 json 태그 사이의 대응 관계를 참고해 인코딩·디코딩을 수행합니다. 외부 API 응답 구조를 직접 struct로 작성하는 작업은 필드가 늘어날 때마다 손이 많이 가는 반복 작업이며, 많은 Go 프로젝트에서 되풀이되어 왔습니다.
이 도구는 샘플 JSON의 구조를 분석해 대응하는 struct 정의와 json 태그를 자동으로 생성함으로써 이 반복 작업을 줄여 줍니다. 같은 분야의 유명한 도구로는 여러 언어의 타입 변환을 지원하는 quicktype이 있지만, 손에 있는 API 응답 샘플을 그대로 붙여넣어 빠르게 Go struct를 얻고 싶은 경우라면 한 가지 기능에 집중한 도구도 나름의 편리함이 있습니다.
Go에는 struct 필드를 선택적(optional)으로 만드는 언어 기능이 없기 때문에, 누락될 수 있는 JSON 필드에 대해서는 json 태그에 `omitempty`를 붙이거나 포인터 타입(`*string` 등)을 사용해 제로 값과 "값이 존재하지 않음"을 구분하는 방식이 일반적입니다. 생성된 struct는 어디까지나 구조로부터 기계적으로 추론한 결과이므로, null 허용 여부나 API의 향후 변경 가능성은 실제 명세와 대조해 수동으로 조정하는 것이 실무상의 정석입니다.