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

Go에서 역정렬화할 때 JSON Null과 누락된 필드를 어떻게 구별할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-03 21:03:17405검색

How Can I Distinguish Between JSON Null and Missing Fields When Unmarshaling in Go?

비정렬화 중에 Null로 설정된 JSON 필드와 존재하지 않는 필드 구별

JSON을 Golang 구조체로 역마샬링할 때 null로 설정된 필드 간 구별 존재하지 않는 필드가 중요할 수 있습니다. 두 시나리오 모두 구조체에 nil 값이 발생하여 의도한 의미를 모호하게 만듭니다.

제네릭을 사용한 차별화(Go 1.18 )

Go 1.18은 제네릭을 도입하여 다음과 같은 간결한 솔루션을 가능하게 합니다. 단일 일반 유형:

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

이것은 type은 정의된 필드 상태(정의)를 사용하여 선택적 값의 개념을 캡슐화합니다.

사용 예:

type Payload struct {
    Field1 Optional[string] `json:"field1"`
    Field2 Optional[int]   `json:"field2"`
}

정렬 해제 후 정의된 값(정의)이 있는 필드 == true)는 null 값(Value == nil)과 누락된 값(Defined ==)을 구별할 수 있습니다. false).

사전 제네릭 솔루션

사용자 정의 유형 래퍼:

type OptionalString struct {
    Defined bool
    Value   *string
}

func (os *OptionalString) UnmarshalJSON(data []byte) error {
    os.Defined = true
    return json.Unmarshal(data, &os.Value)
}

예 사용법:

type Payload struct {
    Field1 string         `json:"field1"`
    Field2 OptionalString `json:"field2"`
}

제한 사항:

  • 지원되는 각 유형에 대한 전용 구조체 래퍼가 필요합니다(예: 숫자 유형의 경우 OptionalNumber).
  • null과 누락을 포괄적으로 구분하지 않습니다. 가치를 부여합니다.

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

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