JSON을 Go 구조체로 변환
JSON 샘플을 붙여넣으면 encoding/json으로 깔끔하게 파싱되는 Go 구조체 정의를 얻을 수 있습니다. 필드는 내보내지고(CamelCase), 원본 JSON 키로 태그가 부여되며, 값이 null일 수 있는 경우 포인터로 승격됩니다. 중첩 객체는 각각 이름이 지정된 별도의 구조체 선언을 갖습니다.
JSON을 Go 구조체로 변환하는 방법
-
1
JSON 붙여넣기
샘플 하나면 충분합니다. 여러 개의 샘플을 사용하면 nullable 추론의 정확도가 높아집니다.
-
2
이름 규칙 선택
내보내는 필드에는 PascalCase를 쓰는 것이 Go의 관례입니다. 약어 스타일을 선택하세요(`URL` 대 `Url`, `ID` 대 `Id`).
-
3
옵셔널 전략 선택
nullable 필드에는 포인터를 사용하거나(가장 관용적) `omitempty` 태그를 사용하세요.
-
4
구조체 복사
루트 구조체 하나와 중첩 구조체들입니다. `.go` 파일에 붙여넣고 `go build`를 실행하세요.
출력 예시
다음 입력에 대해:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
출력:
type User struct {
FirstName string `json:"first_name"`
Age int `json:"age"`
Email *string `json:"email"`
Tags []string `json:"tags"`
}
타입 매핑
| JSON 값 | Go 타입 |
|---|---|
| 문자열 | string |
| 정수 | int 또는 int64 |
| 숫자(소수) | float64 |
| 논리값 | bool |
| null (null이 아닌 형제가 있을 때) | *T (포인터) |
| 배열 | []T |
| 객체 | 이름이 지정된 구조체 |
| 혼합 배열 | []interface{} |
생성기가 따르는 이름 규칙
- 약어는 대문자로 표기:
id→ID,url→URL,api_key→APIKey. 이는 Go의 권장 스타일 및go vet/staticcheck규칙에 부합합니다. - snake_case JSON → PascalCase 필드:
first_name→FirstName. - 한 단어짜리 약어는 그대로 유지:
IP는IP로,HTTP는HTTP로 유지됩니다. - JSON 태그:
json:"first_name"는 원본 키를 그대로 유지하여 인코딩이 양방향으로 깔끔하게 처리됩니다.
옵셔널 필드: 포인터 또는 omitempty?
| 전략 | 사용 시점 |
|---|---|
포인터 (*T) |
“없음”과 “영값”을 구분해야 할 때 |
omitempty |
마셜 시 영값만 건너뛰면 될 때. 언마셜 시 누락된 값에는 0이 저장됩니다 |
| 둘 다 아님 | 필드가 항상 존재하고 영값이 의미를 가질 때 |
생성기는 null로 간주되는 모든 값에 대해 기본적으로 포인터 + omitempty를 사용합니다. 의미에 맞게 조정하세요.
흔한 실수
- 32비트 대상에서 JSON 정수가
MaxInt32를 초과하는데int를 사용하는 경우. 큰 값이 예상되면int64를 사용하세요. - 다시 마셜하면서 키 순서를 잃는 경우.
encoding/json은 원본 JSON 순서가 아니라 필드 선언 순서로 키를 출력합니다. 정규화된 출력이 필요하면 직접 정렬하세요. - 형태가 섞인 배열.
[]interface{}는 타입 안전성을 잃습니다. 대신type판별 필드를 갖는 유니온 타입을 고려하세요. - 옵셔널 필드에
omitempty를 빠뜨리는 경우. 이것이 없으면 옵셔널 필드는 생략되지 않고"foo": null로 직렬화됩니다.
자주 묻는 질문
“필드가 없음”과 “필드가 0임”을 구분해야 할 때는 포인터를 사용하세요. 영값이 정상적인 업무 값이 아닐 때("", 0, false가 항상 “이 항목을 건너뛰기”를 뜻할 때)는 omitempty를 사용하세요. 많은 팀이 하나를 정해 코드베이스 전체에 일관되게 적용합니다.
각 중첩 객체는 이름이 지정된 별도의 구조체 선언이 됩니다(예: User → Address). 타입이 인라인으로 처리되는 것은 중첩 구조체가 아주 작고 한 번만 사용되는 경우뿐이며, 그 외에는 깔끔하고 재사용 가능한 타입이 생성됩니다.
네. id는 ID로, url은 URL로, api_key는 APIKey로 바뀝니다. 이는 go vet이 기대하는 방식이며 대부분의 Go 스타일 가이드가 권장하는 방식입니다.
생성기는 표준 json: 태그가 붙은 일반 구조체를 출력합니다. 커스텀 UnmarshalJSON 구현(예: 비 ISO 형식의 날짜)은 생성 후 직접 추가하세요.
관련 도구
ASCII 표 참조
NUL, LF, DEL 같은 제어 문자를 포함해 모든 문자에 대한 10진수, 16진수, 8진수, 2진수, HTML 숫자 문자 참조를 담은 0부터 127까지의 전체 ASCII 표.
HTML 문자 참조
HTML 엔티티의 검색 가능한 목록, 각 엔티티의 이름 및 숫자 코드, 그리고 특수 문자 및 기호에 대한 1클릭 복사 기능을 제공합니다.
키보드 단축키 참고표
macOS, Windows, Linux에서 VS Code, Chrome, GNU Readline을 쓰는 Bash의 문서화된 기본 단축키를 검색합니다.
보색 찾기
어떤 입력에 대해서도 보색을 찾습니다. HSL 반대 색, 분할 보색 쌍, 그리고 접근성 있는 조합 제안을 반환합니다.
이메일 검증기
이메일 주소를 검증합니다. RFC 5322 구문 검사, 실시간 MX 레코드 조회, 그리고 로컬 파트, 도메인, 길이 정보를 제공합니다. 이메일은 전송되지 않습니다.
EditorConfig 생성기
들여쓰기 스타일과 크기, 줄 끝, 문자 인코딩, 공백 규칙을 지정해 .editorconfig 파일을 생성하고 IDE와 편집기 전반의 형식을 일관되게 유지하세요.
이 도구는 다른 언어로도 제공됩니다
- JSON ke Struktur Go [ID]
- JSON thành cấu trúc [VI]
- JSON a Estructura Go [ES]
- JSON vers Go Struct [FR]
- JSON naar Go-structuur [NL]
- JSON till Go-struktur [SV]
- JSON→Go構造体 [JA]
- JSON เป็นโครงสร้างข้อมูล Go [TH]
- JSON إلى بنية Go [AR]
- JSON zu Go Struct [DE]
- JSON na strukturę Go [PL]
- JSON para Estrutura Go [PT]
- JSON in Struttura Go [IT]
- JSON в структуру данных [RU]
- JSON'dan Go Yapısına [TR]
- JSON 至Go结构 [ZH]
- JSON to Go Struct [EN]