sql.NullString 필드가 있는 Golang 구조체가 있는 경우 기본 마샬링 동작은 다음과 같습니다. 문자열 및 유효한 키가 있는 JSON 개체 내에 필드가 중첩된 출력입니다. NullString 값만 포함하는 평면화된 출력을 얻으려면 다음 단계를 따르세요.
1. 사용자 정의 유형 정의:
sql.NullString을 포함하고 json.Marshaler 인터페이스를 구현하는 사용자 정의 유형을 생성합니다.
type MyNullString struct { sql.NullString }
2. MarshalJSON 메서드 구현:
MyNullString 내에서 MarshalJSON 메서드를 구현하여 사용자 지정 JSON 마샬링 동작을 제공합니다.
func (s MyNullString) MarshalJSON() ([]byte, error) { if s.Valid { return json.Marshal(s.String) } return []byte(`null`), nil }
3. 구조체 수정:
평탄화가 필요한 구조체의 필드에 사용자 정의 MyNullString 유형을 사용합니다.
type Company struct { ID int `json:"id"` Abn MyNullString `json:"abn,string"` }
예:
package main import ( "database/sql" "encoding/json" "log" ) type MyNullString struct { sql.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"` } func main() { company := Company{ ID: 68, Abn: MyNullString{String: "SomeABN", Valid: true}, } result, err := json.Marshal(company) if err != nil { log.Fatal(err) } // Output: {"id":68,"abn":"SomeABN"} log.Println(string(result)) }
이러한 단계를 수행하면 출력을 효과적으로 평탄화할 수 있습니다. sql.NullString 필드를 검색하고 마샬링된 JSON의 값만 가져옵니다.
위 내용은 Go에서 마샬링된 sql.NullString의 출력을 평면화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!