>백엔드 개발 >Golang >Go에서 Null 필드와 누락된 JSON 필드를 어떻게 구별할 수 있나요?

Go에서 Null 필드와 누락된 JSON 필드를 어떻게 구별할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-11-30 19:35:12470검색

How Can I Differentiate Between Null and Missing JSON Fields in Go?

Go에서 Null 필드와 존재하지 않는 JSON 필드 구별

JSON을 Go 구조체로 언마샬링할 때 JSON 필드를 구별하기 어려울 수 있습니다. 명시적으로 null로 설정된 것과 JSON 페이로드에 존재하지 않는 것입니다. 이러한 구별은 데이터의 의미와 해석에 영향을 미치기 때문에 많은 시나리오에서 매우 중요합니다.

Go 1.18 솔루션

일반 Optional 구조체인 Go 1.18부터 시작합니다. 이 문제를 해결하는 데 활용할 수 있습니다.

type Optional[T any] struct {
    Defined bool
    Value   *T
}

이 구조체는 UnmarshalJSON 인터페이스를 사용하면 정의된 값과 정의되지 않은 값을 구별할 수 있습니다. JSON 페이로드를 언마샬링할 때 값이 null인지 또는 유효한 값인지에 관계없이 Optional 구조체의 정의된 필드가 true로 설정됩니다.

사용 예

type Payload struct {
    Field1 Optional[string] `json:"field1"`
    Field2 Optional[bool]   `json:"field2"`
    Field3 Optional[int32]  `json:"field3"`
}

JSON 페이로드를 언마샬링한 후 정의된 필드를 사용하여 특정 필드가 JSON에 있는지 또는 그렇지 않습니다.

Pre-Go 1.18 솔루션

Go 1.18 이전 버전의 경우 사용자 정의 유형을 생성하여 동일한 결과를 얻을 수 있습니다.

type OptionalString struct {
    Defined bool
    Value   *string
}

Go 1.18의 Optional 구조체와 유사하며 이 유형은 UnmarshalJSON을 구현합니다.

사용 예

type Payload struct {
    SomeField1 string         `json:"somefield1"`
    SomeField2 OptionalString `json:"somefield2"`
}

이 사용자 정의 유형을 활용하면 정의된 필드를 검사하여 null과 non-in을 구별할 수 있습니다. 존재하는 필드입니다.

위 내용은 Go에서 Null 필드와 누락된 JSON 필드를 어떻게 구별할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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