JSON 언마샬링에서 부울 구문 분석 옵션 확장
부울 유형과 다른 값 사이의 경계를 모호하게 만드는 서비스 출력을 매핑할 때 더 수용적인 JSON 파서는 필수가 됩니다. 내장된 인코딩/json 비정렬 함수는 이 점에서 부족하여 허용적인 구문 분석 대안을 검색하라는 메시지를 표시합니다.
한 가지 접근 방식은 원하는 유형에 대한 사용자 정의 UnmarshalJSON 함수를 만드는 것입니다. 이 함수는 모호한 부울 값을 처리하기 위해 사용자 정의 구문 분석 규칙을 정의할 수 있습니다. 예를 들어 다음 ConvertibleBoolean 유형을 고려해 보세요.
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 }
이 함수에서 문자열 "1"과 "true"는 true로 매핑되고 "0"과 "false"는 false로 구문 분석됩니다. 이 범위를 벗어나는 값은 오류를 유발합니다.
이 사용자 정의 부울 구문 분석을 활용하려면 대상 필드에 json 태그를 적용하세요. 예:
type MyType struct { AsBoolean ConvertibleBoolean `json:"field1"` AlsoBoolean ConvertibleBoolean `json:"field2"` }
이러한 사용자 정의 구문 분석 규칙이 적용되면 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"
By 사용자 정의 구문 분석 기능을 활용하면 JSON 역마샬링의 유연성을 얻을 수 있으므로 모호한 부울 값을 다음과 같이 처리할 수 있습니다. 필요합니다.
위 내용은 모호한 부울 값을 처리하기 위해 JSON 역마샬링을 사용자 정의하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!