>백엔드 개발 >Golang >Go에서 JSON을 언마샬링할 때 빈 필드와 정의되지 않은 필드를 어떻게 구별할 수 있나요?

Go에서 JSON을 언마샬링할 때 빈 필드와 정의되지 않은 필드를 어떻게 구별할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-12-12 20:32:15385검색

How Can I Differentiate Between Empty and Undefined Fields When Unmarshaling JSON in Go?

공허 발견: Go의 언마샬링 프로세스에서 정의되지 않은 필드 인식

JSON 데이터를 Go 구조체로 언마샬링할 때 빈 값과 지정되지 않은 필드를 구별 데이터 불일치를 처리하는 데 필수적일 수 있습니다. 다음 예를 고려해 보세요.

var jsonBlob = []byte(`[
    {"Name": "A", "Description": "Monotremata"},
    {"Name": "B"},
    {"Name": "C", "Description": ""}
]`)

type Category struct {
    Name  string
    Description string
}

var categories []Category
err := json.Unmarshal(jsonBlob, &categories)

if err != nil {
    fmt.Println("error:", err)
}
fmt.Printf("%+v", categories)

이 코드를 실행하면 다음과 같은 출력이 생성됩니다.

[
  {Name:A Description:Monotremata}
  {Name:B Description:}
  {Name:C Description:}
]

보시다시피 정의되지 않은 "설명" 필드(예: "범주 B")와 빈 "설명" 필드("범주 C"와 같음)가 있습니다. 이러한 모호성은 잘못된 프로그램 동작으로 이어질 수 있습니다.

해결책: 포인터를 사용하여 구별

이 문제를 극복하려면 필드 유형을 포인터로 수정하면 됩니다. JSON 데이터에 빈 문자열 값이 포함되어 있으면 빈 문자열에 대한 포인터가 생성됩니다. 그러나 해당 필드가 JSON 데이터에 없으면 nil로 유지됩니다.

type Category struct {
    Name        string
    Description *string
}

이 수정을 통해 업데이트된 출력은 다음과 같습니다.

[
  {Name:A Description:0x1050c150}
  {Name:B Description:<nil>}
  {Name:C Description:0x1050c158}
]

이제 쉽게 다음을 수행할 수 있습니다. 빈 값과 지정되지 않은 필드를 구별합니다. nil이 아닌 포인터는 빈 값을 나타내고 nil 포인터는 해당 필드가 JSON 데이터에 없음을 나타냅니다. 이를 통해 프로그램에서 이러한 사례를 다르게 처리하여 데이터 정확성과 적절한 동작을 보장할 수 있습니다.

위 내용은 Go에서 JSON을 언마샬링할 때 빈 필드와 정의되지 않은 필드를 어떻게 구별할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.