Golang에서 `json.MarshalIndent`를 사용하는 방법
Emily Parker
Product Engineer · Leapcell

Key Takeaways
json.MarshalIndent
는 사용자 정의 가능한 들여쓰기 및 접두사로 JSON 형식을 지정합니다.- JSON 가독성을 향상시켜 디버깅 및 로깅에 유용합니다.
- 지원되지 않는 데이터 유형 관련 문제를 피하려면 적절한 오류 처리가 필요합니다.
Introduction
Golang에서 JSON을 사용할 때 encoding/json
패키지는 Go 데이터 구조를 JSON 형식으로 직렬화하는 json.Marshal
함수를 제공합니다. 그러나 json.Marshal
의 기본 출력은 콤팩트하며 추가 공백이나 들여쓰기를 포함하지 않습니다. 사람이 읽을 수 있는 형식화된 JSON 출력이 필요한 경우 json.MarshalIndent
를 사용할 수 있습니다.
이 문서에서는 json.MarshalIndent
를 효과적으로 사용하는 방법과 실제 예제를 설명합니다.
Understanding json.MarshalIndent
json.MarshalIndent
함수는 json.Marshal
과 유사하지만 들여쓰기 설정을 지정할 수 있습니다. 함수 서명은 다음과 같습니다.
func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)
v
는 JSON으로 직렬화될 Go 값입니다.prefix
는 출력의 각 줄에 접두사로 붙는 문자열입니다.indent
는 형식 지정에 사용되는 들여쓰기 문자를 정의합니다.- 이 함수는 형식화된 JSON이 포함된
[]byte
와 직렬화가 실패하면error
를 반환합니다.
Basic Example
json.MarshalIndent
를 사용하는 간단한 예를 살펴보겠습니다.
package main import ( "encoding/json" "fmt" ) type User struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email"` } func main() { user := User{ Name: "Alice", Age: 25, Email: "alice@example.com", } // MarshalIndent with two spaces for indentation jsonData, err := json.MarshalIndent(user, "", " ") if err != nil { fmt.Println("Error:", err) return } // Convert JSON bytes to string and print fmt.Println(string(jsonData)) }
Output
{ "name": "Alice", "age": 25, "email": "alice@example.com" }
Explanation
- 두 번째 인수(
""
)는 빈 접두사로 각 줄의 시작 부분에 추가 문자가 없음을 의미합니다. - 세 번째 인수(
" "
)는 각 들여쓰기 수준이 두 개의 공백을 사용하도록 지정합니다. - 출력 JSON은 새 줄과 들여쓰기로 적절하게 형식이 지정되어 읽기 쉽습니다.
Customizing Indentation
indent
매개변수를 사용자 지정하여 다른 형식 스타일을 사용할 수 있습니다.
Using Tabs Instead of Spaces
jsonData, err := json.MarshalIndent(user, "", "\t")
이렇게 하면 공백 대신 탭 들여쓰기가 있는 JSON이 생성됩니다.
Adding a Prefix
jsonData, err := json.MarshalIndent(user, "> ", " ")
이렇게 하면 각 줄 앞에 "> "
접두사가 추가됩니다.
> { > "name": "Alice", > "age": 25, > "email": "alice@example.com" > }
Handling Nested Structures
json.MarshalIndent
는 중첩된 구조체에서 잘 작동합니다. 여기에 내장된 구조체의 예가 있습니다.
type Address struct { City string `json:"city"` State string `json:"state"` } type UserWithAddress struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email"` Address Address `json:"address"` } func main() { user := UserWithAddress{ Name: "Bob", Age: 30, Email: "bob@example.com", Address: Address{ City: "New York", State: "NY", }, } jsonData, err := json.MarshalIndent(user, "", " ") if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(jsonData)) }
Output
{ "name": "Bob", "age": 30, "email": "bob@example.com", "address": { "city": "New York", "state": "NY" } }
Error Handling
json.MarshalIndent
가 지원되지 않는 형식(예: 채널 또는 함수)을 만나면 오류를 반환합니다. 반환된 JSON 데이터를 사용하기 전에 항상 오류를 확인하십시오.
jsonData, err := json.MarshalIndent(user, "", " ") if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(jsonData))
Conclusion
json.MarshalIndent
는 들여쓰기가 있는 사람이 읽을 수 있는 JSON을 생성하는 데 유용한 Golang 함수입니다. 접두사 및 들여쓰기 문자열을 지정하여 필요에 맞게 출력 형식을 사용자 지정할 수 있습니다. 특히 JSON 응답을 로깅하거나 디버깅하거나 읽을 수 있는 형식으로 구성 파일을 저장할 때 유용합니다.
json.MarshalIndent
를 마스터하면 JSON 데이터의 가독성을 향상시키고 개발 및 디버깅 시나리오에서 더 쉽게 작업할 수 있습니다.
FAQs
json.Marshal
은 콤팩트 JSON을 생성하고 json.MarshalIndent
는 가독성을 높이기 위해 들여쓰기로 JSON 형식을 지정합니다.
예, json.MarshalIndent
에서 "\t"
를 indent 매개변수로 전달하여 사용할 수 있습니다.
json.MarshalIndent
는 오류를 반환하므로 항상 오류를 적절하게 처리해야 합니다.
Go 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 지불하십시오. 요청이나 요금은 없습니다.
타의 추종을 불허하는 비용 효율성
- 유휴 요금 없이 사용한 만큼만 지불하십시오.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
간편한 확장성 및 고성능
- 고도의 동시성을 쉽게 처리하기 위한 자동 확장.
- 운영 오버헤드가 없으므로 빌드에만 집중하십시오.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ