>백엔드 개발 >Golang >Go 유형 변환을 사용하여 JSON에서 SQL NULL 값을 처리하는 방법은 무엇입니까?

Go 유형 변환을 사용하여 JSON에서 SQL NULL 값을 처리하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-22 01:31:18316검색

How to Handle SQL NULL Values in JSON using Go Type Conversions?

Go 유형 변환을 통한 JSON SQL NULL 값 처리

Int64 및 String과 같은 Go 유형은 sql.NullInt64를 사용하여 Null 값을 저장할 수 없습니다. sql.NullString은 이 기능을 허용합니다. 그러나 json 패키지를 사용하여 이러한 유형을 JSON으로 인코딩하면 일반 Int64 및 String 유형에 비해 형식이 변경됩니다.

이러한 불일치는 sql.Null* 유형 자체가 구조체이기 때문에 발생합니다. JSON 표현의 추가 중첩 수준입니다. 이 문제를 극복하기 위해 json.Marshaller 및 json.Unmarshaler 인터페이스를 준수하는 사용자 정의 유형을 구현할 수 있습니다.

예를 들어, sql.NullInt64 유형을 포함하고 사용자 정의 JSON 처리를 구현하여 JsonNullInt64 유형을 정의할 수 있습니다.

type JsonNullInt64 struct {
    sql.NullInt64
}

func (v JsonNullInt64) MarshalJSON() ([]byte, error) {
    if v.Valid {
        return json.Marshal(v.Int64)
    } else {
        return json.Marshal(nil)
    }
}

func (v *JsonNullInt64) UnmarshalJSON(data []byte) error {
    // Pointer unmarshalling ensures NULL detection
    var x *int64
    if err := json.Unmarshal(data, &x); err != nil {
        return err
    }
    if x != nil {
        v.Valid = true
        v.Int64 = *x
    } else {
        v.Valid = false
    }
    return nil
}

sql.NullInt64를 다음으로 대체 JsonNullInt64는 원하는 JSON 인코딩을 생성합니다. 추가 테스트를 원하시면 다음 놀이터를 참조하세요: http://play.golang.org/p/zFESxLcd-c

위 내용은 Go 유형 변환을 사용하여 JSON에서 SQL NULL 값을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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