GO · 파일/IO
JSON 인코딩/디코딩
encoding/json으로 구조체와 JSON을 변환합니다. 태그로 필드 이름과 동작을 제어합니다.
파일/IO중급jsonmarshalunmarshalstruct-tag
핵심 설명
encoding/json으로 구조체와 JSON을 변환합니다. 태그로 필드 이름과 동작을 제어합니다.
Go code
package main
import (
"encoding/json"
"fmt"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email,omitempty"`
Password string `json:"-"` // JSON에서 제외
Tags []string `json:"tags,omitempty"`
}
func main() {
// 마샬링 (구조체 → JSON)
user := User{ID: 1, Name: "Gopher", Password: "secret"}
data, _ := json.MarshalIndent(user, "", " ")
fmt.Println(string(data))
// 언마샬링 (JSON → 구조체)
jsonStr := `{"id":2,"name":"Rustacean","email":"r@go.dev","tags":["dev"]}`
var u2 User
json.Unmarshal([]byte(jsonStr), &u2)
fmt.Printf("%+v\n", u2)
// map으로 동적 JSON 처리
var m map[string]any
json.Unmarshal([]byte(jsonStr), &m)
fmt.Println("동적:", m["name"])
}학습 팁
omitempty는 제로 값(0, "", nil, 빈 슬라이스)을 JSON에서 생략합니다. API 응답 크기를 줄이는 데 유용합니다.
주의할 점
비공개 필드(소문자)는 JSON 인코딩/디코딩에서 무시됩니다. JSON 바인딩이 필요한 필드는 대문자로 시작해야 합니다.
자주 묻는 질문
JSON 인코딩/디코딩란 무엇인가요?
encoding/json 으로 구조체와 JSON을 변환합니다. 태그로 필드 이름과 동작을 제어합니다.
JSON 인코딩/디코딩 학습 시 주의할 점은 무엇인가요?
비공개 필드(소문자)는 JSON 인코딩/디코딩에서 무시됩니다. JSON 바인딩이 필요한 필드는 대문자로 시작해야 합니다.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.