다중 표현을 사용하여 JSON 부울 역마샬링
JSON을 부울 유형으로 역마샬링할 때 내장된 인코딩/json 역정렬 함수는 다음과 같은 값을 예상합니다. "참"과 "거짓"으로. 그러나 특정 서비스에서는 부울 유형에 대해 "0"과 "false"(및 "1"과 "true")를 교환할 수 있습니다.
이러한 유연성을 수용하기 위해 다음을 변환하는 사용자 정의 역마샬링 함수를 생성할 수 있습니다. "0", "1", "false" 및 "true"와 같은 문자열 값을 원하는 부울 표현으로 변환합니다.
다음은 여러 표현으로 부울 값을 비정렬화하는 데 사용할 수 있는 사용자 정의 유형 ConvertibleBoolean:
import ( "encoding/json" "errors" ) type ConvertibleBoolean bool func (bit *ConvertibleBoolean) UnmarshalJSON(data []byte) error { asString := string(data) if asString == "1" || asString == "true" { *bit = true } else if asString == "0" || asString == "false" { *bit = false } else { return errors.New(fmt.Sprintf("Boolean unmarshal error: invalid input %s", asString)) } return nil }
이 사용자 정의 유형을 사용하면 ConvertibleBoolean 유형의 필드로 구조체를 정의하고 "0" 및 "false를 포함하는 JSON 데이터를 비정렬화할 수 있습니다. "를 부울로:
type MyType struct { AsBoolean ConvertibleBoolean `json:"field1"` AlsoBoolean ConvertibleBoolean `json:"field2"` }
변환 가능한 부울 값으로 입력 JSON을 비정렬화하면, 구조체의 ConvertibleBoolean 필드가 올바르게 채워집니다.
input_json := `{ "field1" : true, "field2" : 1 }` obj := MyType{} json_err := json.Unmarshal([]byte(input_json), &obj) fmt.Printf("%v\n", obj.AsBoolean) //"true" fmt.Printf("%v\n", obj.AlsoBoolean) //"true"
ConvertibleBoolean과 같은 사용자 정의 역마샬링 함수를 사용하면 Go 구조체로 역마샬링할 때 JSON 데이터의 여러 표현으로 부울 값을 처리할 수 있습니다.
위 내용은 Go에서 언마샬링할 때 여러 JSON 부울 표현을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!