JSON을 Go 구조체로 변환하는 방법
James Reed
Infrastructure Engineer · Leapcell

Key Takeaways
- Go 구조체 필드에 JSON 키를 매핑하려면 구조체 필드 태그(
json:"field"
)를 사용하세요. json.Unmarshal
을 사용하여 JSON을 구조체로 디코딩하고json.Marshal
을 사용하여 인코딩합니다.- 중첩된 Go 구조체를 정의하여 중첩된 JSON 구조를 처리합니다.
JSON(JavaScript Object Notation)은 데이터 교환에 널리 사용되는 형식이며, Go(또는 Golang)는 JSON 작업에 대한 강력한 지원을 제공합니다. JSON 데이터를 Go 구조체로 변환하면 타입 안전성이 향상되고 데이터 처리가 더 효율적으로 이루어집니다. 이 문서에서는 JSON을 Go 구조체로 효율적으로 변환하는 방법을 살펴봅니다.
Go 구조체 정의
JSON을 파싱하기 전에 JSON 구조와 일치하는 해당 Go 구조체가 필요합니다. 다음 JSON 예제를 고려하십시오.
{ "name": "Alice", "age": 25, "email": "alice@example.com" }
해당 Go 구조체는 적절한 필드 이름 및 타입으로 정의되어야 합니다.
type Person struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email"` }
구조체 필드 태그(예: json:"name"
)는 JSON 키를 구조체 필드에 매핑합니다.
JSON을 구조체로 파싱
Go의 encoding/json
패키지는 JSON을 구조체로 파싱하는 기능을 제공합니다. 다음은 JSON을 Go 구조체로 디코딩하는 방법입니다.
package main import ( "encoding/json" "fmt" ) func main() { jsonData := `{"name": "Alice", "age": 25, "email": "alice@example.com"}` var person Person err := json.Unmarshal([]byte(jsonData), &person) if err != nil { fmt.Println("Error parsing JSON:", err) return } fmt.Println("Parsed Struct:", person) }
구조체를 JSON으로 인코딩
json.Marshal
을 사용하여 Go 구조체를 JSON 문자열로 변환할 수도 있습니다.
encodedData, err := json.Marshal(person) if err != nil { fmt.Println("Error encoding JSON:", err) return } fmt.Println("JSON Output:", string(encodedData))
중첩된 JSON 구조 처리
JSON에 중첩된 객체가 포함된 경우 해당 중첩된 구조체를 정의합니다.
{ "name": "Alice", "contact": { "email": "alice@example.com", "phone": "123-456-7890" } }
해당 Go 구조체는 다음과 같습니다.
type Contact struct { Email string `json:"email"` Phone string `json:"phone"` } type Person struct { Name string `json:"name"` Contact Contact `json:"contact"` }
부분 파싱을 위해 json.RawMessage
사용
특정 JSON 필드의 파싱을 연기해야 하는 경우 json.RawMessage
를 사용합니다.
type Data struct { Info json.RawMessage `json:"info"` }
결론
JSON을 Go 구조체로 변환하는 것은 Go 애플리케이션에서 구조화된 데이터를 처리하는 데 필수적입니다. 적절한 구조체 타입을 정의하고, json.Unmarshal
및 json.Marshal
을 사용하고, json.RawMessage
와 같은 기능을 활용하여 Go에서 JSON 데이터를 효율적으로 관리할 수 있습니다.
FAQs
해당 구조체 필드는 제로 값(예: 문자열의 경우 ""
, 정수의 경우 0
)을 갖습니다.
json:"-"
태그를 사용하여 JSON 직렬화 및 역직렬화에서 필드를 제외합니다.
예, 유연한 JSON 처리를 위해 map[string]interface{}
또는 json.RawMessage
를 사용합니다.
Leapcell은 Go 프로젝트 호스팅을 위한 최고의 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하세요.
무료로 무제한 프로젝트 배포
- 사용량에 대해서만 지불하세요. 요청이나 요금이 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용량에 따라 지불합니다.
- 예: 25달러로 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 높은 동시성을 쉽게 처리할 수 있도록 자동 확장됩니다.
- 운영 오버헤드가 전혀 없습니다. 빌드에만 집중하세요.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ