PHpullh
학습 라이브러리/Go/JSON 인코딩/디코딩

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 메타데이터를 가집니다.