>백엔드 개발 >Golang >Go에서 JSON을 마샬링할 때 sql.NullString 출력을 평면화하는 방법은 무엇입니까?

Go에서 JSON을 마샬링할 때 sql.NullString 출력을 평면화하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-30 02:18:10315검색

How to Flatten sql.NullString Output When Marshaling JSON in Go?

JSON 마샬링 중 sql.NullString 출력 평면화

sql.NullString 필드가 포함된 Go 구조체를 마샬링할 때 기본 출력에는 필드의 내용이 포함됩니다. 유효 및 문자열 속성. 값만 포함하는 평면화된 출력을 얻으려면 추가 단계를 수행해야 합니다.

다음 구조체를 고려하세요.

type Company struct {
    ID   int             `json:"id"`              
    Abn  sql.NullString  `json:"abn,string"`
}

이 구조체를 json.Marshal로 마샬링하면 다음과 같은 출력이 생성됩니다. :

{
    "id": "68",
    "abn": {
        "String": "SomeABN",
        "Valid": true
    }
}

사용자 지정 JSON을 위한 sql.NullString 확장 마샬링

이 출력을 평면화하려면 sql.NullString을 확장하고 json.Marshaler를 구현해야 합니다.

type NullString sql.NullString

func (x *NullString) MarshalJSON() ([]byte, error) {
    if !x.Valid {
        x.Valid = true
        x.String = ""
        //return []byte("null"), nil
    }
    return json.Marshal(x.String)
}

평면화된 출력을 위한 사용자 정의 유형 정의

다음으로 확장된 NullString을 포함하고 구현하는 사용자 정의 유형을 정의합니다. json.Marshaler.

type MyNullString struct {
    NullString
}

func (s MyNullString) MarshalJSON() ([]byte, error) {
    if s.Valid {
        return json.Marshal(s.String)
    }
    return []byte(`null`), nil
}

type Company struct {
    ID   int          `json:"id"`              
    Abn  MyNullString `json:"abn,string"`
}

이 사용자 정의 유형을 사용하면 마샬링된 출력은 다음과 같습니다.

{
    "id": "68",
    "abn": "SomeABN"
}

위 내용은 Go에서 JSON을 마샬링할 때 sql.NullString 출력을 평면화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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